IOS如何选择图片加载方式:imageNamed和imageWithContentsOfFile的区别

原创 2013年06月08日 10:33:57

IOS如何选择图片加载方式:imageNamed和imageWithContentsOfFile的区别

作者:wangzz
原文地址:http://blog.csdn.net/wzzvictory/article/details/9053813
转载请注明出处
如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号wangzzstrive来支持我,谢谢!
 
IOS内存稀缺,而图片资源通常又是最占内存的部分之一,因此,选择如何加载图片,对于优化应用内存占用量,能起到立竿见影的效果。通常加载图片的方式有两种:

一、imageNamed

为什么有两种方法完成同样的事情呢?imageNamed的优点在于可以缓存已经加载的图片。苹果的文档中有如下说法:

This method looks in the system caches for an image object with the specified name and returns that object if it exists. If a matching image object is not already in the cache, this method locates and loads the image data from disk or asset catelog, and then returns the resulting object. You can not assume that this method is thread safe.

这种方法会首先在系统缓存中根据指定的名字寻找图片,如果找到了就返回。如果没有在缓存中找到图片,该方法会从指定的文件中加载图片数据,并将其缓存起来,然后再把结果返回,下次再使用该名称图片的时候就省去了从硬盘中加载图片的过程。对于相同名称的图片,系统只会把它Cache到内存一次。

另外,在iOS4及以上系统中,如果是PNG格式的图片,使用该方法加载时不用再指定文件的.png后缀,即只写文件名称即可。

最后,在iOS4及以上系统中,如果屏幕的scale是2(即高分辨率屏幕),该方法会自动使用加上@2x后缀的图片。比如在高分辨率屏幕设备上要加载名称为button的图片,该方法会自动使用名称为button@2x的图片;如果找不到该名称图片再去加载名称为button的图片。这就为开发者省去了适配高、低分辨率屏幕的时间。

二、imageWithContentsOfFile或者imageWithData

而imageWithContentsOfFile方法只是简单的加载图片,并不会将图片缓存起来,图像会被系统以数据方式加载到程序。当你不需要重用该图像,或者你需要将图像以数据方式存储到数据库,又或者你要通过网络下载一个很大的图像时,可以使用这种方式。

三、如何选择

两种加载图片方法的使用方式:

UIImage *img = [UIImage imageNamed:@"myImage"]; // caching  
// or  
UIImage *img = [UIImage imageWithContentsOfFile:@"myImage"]; // no caching
那么该如何选择呢?

如果加载一张很大的图片,并且只使用一次,那么就不需要缓存这个图片。这种情况imageWithContentsOfFile比较合适——系统不会浪费内存来缓存图片。

然而,如果在程序中经常需要重用的图片,比如用于UITableView的图片,那么最好是选择imageNamed方法。这种方法可以节省出每次都从磁盘加载图片的时间。

相关文章推荐

iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?

Apple官方的文档为生成一个UIImage对象提供了两种方法: 1. imageNamed,其参数为图片的名字; 2. imageWithContentsOfFile,其参数也是图片文件的路径。...
  • dqjyong
  • dqjyong
  • 2014年05月25日 17:39
  • 33545

UIImage简谈:[UIImage imageNamed:]与 [UIImage imageWithContentsOfFile]的区别

[UIImage imageNamed:]只适合与UI界面中小的贴图的读取,而一些比较大的资源文件应该尽量避免使用这个接口。 直接读取文件路径[UIImage imageWithContentsOf...

imageNamed:与imageWithContentsOfFile:的区别

Apple官方的文档为生成一个UIImage对象提供了两种方法加载图片: 1. imageNamed,其参数为图片的名字; 2. imageWithContentsOfFile,其参数也是...

万恶的imageNamed

前段时间完成的一个iPad应用,近来测试发现一个问题,在iPad运行大量其他应用程序时很容易出现内容警告而导致程序退出。找了一些资料,发现用起来方便的+ (UIImage *)imageNamed:(...

iOS 正确选择图片加载方式

ios内存稀缺,而图片资源通常又是最占内存的部分之一,因此,选择如何加载图片,对于优化应用内存占用量,能起到立竿见影的效果。通常加载图片的方式有两种:...

iOS开发————几种图片加载方式

作为编者自己的一个复习总结以及广大iOS开发初学者的小小福利,呕心沥血诞生出这篇图片加载方式的文章,如有不足请指正。 先谈谈iOS图像加载方式的分类吧。 本地加载:从程序包中加载,从沙盒加...

imageNamed imageWithContentsOfFile 区别

今天被问到一个问题"imageNamed和imageWithContentsOfFile的区别",之前看 某个人的博客的时候记得是说区别不大,imageNamed包含了imageWithConten...

imageNamed 与 imageWithContentsOfFile的区别

一般情况下,加载图片都如下: myImage = [UIImage imageNamed:@"icon.png"]; 这种方法在一些图片很少,或者图片很小的程序里是ok的。 但是,在大量加载图片的程...

ios开发UIImage imageNamed方法的误用

一、加载图片问题 UIImage image = [UIImage imageNamed:imageFileName]; 这种图片加载方式带有图片缓存的功能,使用这种方式加载图片后...

关于 UIImage ImageNamed的内存释放。

在重构代码时,认真处理一些内存未释放的问题。看到自已的目录树图标的加载,好象没有释放内存,于是,将下面的代码做修改: if(isExpand) { ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOS如何选择图片加载方式:imageNamed和imageWithContentsOfFile的区别
举报原因:
原因补充:

(最多只允许输入30个字)