UIImage *img = [[UIImage alloc] initWithContentsOfFile:@"xx.jpg"]
UIImage *img = [UIImage imageNamed:@"xx.jpg"]
在第二种类型中图像会被缓存吗?
而在第一种类型的图像不会被缓存?是否UIImage缓存图像?
UIImage *img = [[UIImage alloc] initWithContentsOfFile:@"xx.jpg"]
UIImage *img = [UIImage imageNamed:@"xx.jpg"]
在第二种类型中图像会被缓存吗?
而在第一种类型的图像不会被缓存?是否UIImage缓存图像?
-initWithContentsOfFile:
创建一个没有缓存的新图像,这是一个普通的初始化方法。
+imageNamed:
方法使用缓存。这里是从UIImage Reference的文档:
此方法在系统缓存中查找具有指定名称的图像对象,并返回该对象(如果存在)。如果匹配的图像对象不在缓存中,则此方法从指定的文件加载图像数据,将其缓存,然后返回结果对象。
UIImage将保留已加载的映像,使其保持活动状态,直到内存不足情况导致缓存被清除。
更新夫特: 在夫特的UIImage(named: "...")
功能是缓存的图像之一。
正确,第二项被缓存。
只是想离开这里来帮助处理路径名问题。这是一种可以放在UIImage
类别上的方法。
+(UIImage *)imageNamed:(NSString *)name cache:(BOOL)cache {
if (cache)
return [UIImage imageNamed:name];
name = [[NSBundle mainBundle] pathForResource:[name stringByDeletingPathExtension] ofType:[name pathExtension]];
UIImage *retVal = [[UIImage alloc] initWithContentsOfFile:name];
return retVal;
}
如果您没有简单的方法切换到缓存,最终可能会使用`imageNamed。在大多数情况下这是一个很大的错误。请参阅this great answer for more details(并提出问题和答案!)。
如果你希望这不会中断,如果有多个句点,你可以使用'newName = [[NSBundle mainBundle] pathForResource:[name stringByDeletingPathExtension ] ofType:[name pathExtension]];'和'UIImage * retVal = [[UIImage alloc] initWithContentsOfFile:newName];' – lnafziger 2012-12-25 17:23:12
谢谢,很棒! – 2012-12-25 17:42:27
注意:如果bundle中只包含* 2x @版本的图像,则会因为pathForResource不会检查@ 2x而中断。否则,很好的解决方案 – Joel 2014-09-08 17:05:30
@丹Rosenstark答案迅速..
extension UIImage {
static func imageNamed(name: String, cache: Bool) -> UIImage? {
if (cache) {
return UIImage(named: name)
}
// Using NSString for stringByDeletingPathExtension
let fullName = NSString(string: name)
let fileName = fullName.stringByDeletingPathExtension
let ext = fullName.pathExtension
let resourcePath = NSBundle.mainBundle().pathForResource(fileName, ofType: ext)
if let path = resourcePath {
return UIImage(contentsOfFile: path)
}
return nil
}
}
谢谢你的呐喊! – 2016-09-19 18:27:50
将高速缓存使用导致了额外的资源还是会只是一个指针,它指向的对象? – raghul 2011-12-27 13:17:51
@raghul UIImage将保留您现有的图像,并在释放它之后保持活动状态,直到内存不足情况导致高速缓存被清除。 – iHunter 2011-12-27 13:29:50
谢谢ihunter !!! – raghul 2011-12-27 13:33:11