UIImage Cache图像?

rag*_*hul 20 caching objective-c uiimage ios

UIImage *img = [[UIImage alloc] initWithContentsOfFile:@"xx.jpg"]
UIImage *img = [UIImage imageNamed:@"xx.jpg"]
Run Code Online (Sandbox Code Playgroud)

在第二种类型中,图像会被缓存吗?
而在第一种类型中图像不会被缓存?

iHu*_*ter 29

  • -initWithContentsOfFile:没有缓存创建一个新的形象,这是一个普通的初始化方法.

  • +imageNamed:方法使用缓存.这是来自UIImage参考的文档:

    此方法在系统缓存中查找具有指定名称的图像对象,并返回该对象(如果存在).如果匹配的图像对象尚未在缓存中,则此方法从指定的文件加载图像数据,对其进行缓存,然后返回结果对象.

    UIImage将保留加载的图像,使其保持活动状态,直到低内存条件将导致清除缓存.

更新Swift: 在Swift中,该UIImage(named: "...")函数是缓存图像的函数.

  • 我已经模拟了低内存,但是在iOS 10中没有清除缓存 (3认同)

Dan*_*ark 9

只是想留下这个来帮助处理路径名问题.这是一种可以放在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;
}
Run Code Online (Sandbox Code Playgroud)

如果你没有一种简单的方法来切换到缓存,你可能最终只使用`imageNamed.在大多数情况下,这是一个很大的错误.有关更多详细信息,请参阅此优秀答案(并提出问题和答案!).