imageWithContentsOfFile与imageNamed不同的应用场景

imageNamed
: 这个方法用一个指定的名字在系统缓存中查找并返回一个图片对象如果它存在的话。如果缓存中没有找到相应的图片,这个方法从指定的文档中加载然后缓存并返回这个对象。因此imageNamed的优点是当加载时会缓存图片。所以当图片会频繁的使用时,那么用imageNamed的方法会比较好。例如:你需要在 一个TableView里的TableViewCell里都加载同样一个图标,那么用imageNamed加载图像效率很高。系统会把那个图标Cache到内存,在TableViewCell里每次利用那个图 像的时候,只会把图片指针指向同一块内存。正是因此使用imageNamed会缓存图片,即将图片的数据放在内存中,iOS的内存非常珍贵并且在内存消耗过大时,会强制释放内存,即会遇到memory warnings。而在iOS系统里面释放图像的内存是一件比较麻烦的事情,有可能会造成内存泄漏。例如:当一 个UIView对象的animationImages是一个装有UIImage对象动态数组NSMutableArray,并进行逐帧动画。当使用imageNamed的方式加载图像到一个动态数组NSMutableArray,这将会很有可能造成内存泄露。原因很显然的。
imageWithContentsOfFile
:仅加载图片,图像数据不会缓存。因此对于较大的图片以及使用情况较少时,那就可以用该方法,降低内存消耗。
下面看实例进行求证:
我这里用到的是100张图片
oooooo

  • (void)setImageNmaeContentsOfFile:(NSString *)img {
    NSString *imgNmae = [NSString stringWithFormat:@"%@.jpg",img];
    NSBundle *bundle = [NSBundle mainBundle];
    NSString *resourcePath = [bundle resourcePath];
    NSString *filePath = [resourcePath stringByAppendingPathComponent:imgNmae];
    UIImage *imgs = [UIImage imageWithContentsOfFile:filePath];
    _images = imgs;
    }```
Paste_Image.png

消耗的内存:

Paste_Image.png

oooooo

  • (void)setImageNmae:(NSString *)img {
    _images = [UIImage imageNamed:img];
    }```
Paste_Image.png

消耗的内存:

Paste_Image.png

通过实际的代码运行可以对比出来imageWithContentsOfFile:是没有内存缓存的,imageNamed:是有内存缓存的他的缓存是什么时候清除的我们就不得知道了。如果在我们项目中使用了大量图片浏览用的是imageNamed:那就可想而知了。

下面在验证内存消耗:
imageWithContentsOfFile:

Paste_Image.png

内存消耗:

Paste_Image.png

imageNamed:

Paste_Image.png

内存消耗:

Paste_Image.png

imageNamed:不管怎么滑动它内存是不会增加,imageWithContentsOfFile:滑动后它会增加大概增加到40左右就不会增加了一直在这个范围内变动。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 图像IO 潜伏期值得思考 - 凯文 帕萨特 在第13章“高效绘图”中,我们研究了和Core Graphics绘图相...
    方圆几度阅读 414评论 0 0
  • 本文转载自:http://www.cocoachina.com/ios/20150106/10840.html 为...
    idiot_lin阅读 707评论 0 1
  • 在第13章“高效绘图”中,我们研究了和Core Graphics绘图相关的性能问题,以及如何修复。和绘图性能相关紧...
    雪_晟阅读 660评论 0 0
  • 巴黎地铁(法语:Métro de Paris)是法国巴黎的地下轨道交通系统,于1900年起运行至今。目前巴黎地铁总...
    道形图阅读 580评论 1 7
  • 这里有枝繁叶茂的大树,完全遮住这条幽径的小道,似而看不到尽头在哪!这里也有小段木桥,两侧有不一样的护栏,静静矗立在...
    匿名居士阅读 375评论 1 3