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

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

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

作者:wangzz
转载请注明出处
如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号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
  • 35405

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

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

[UIImage imageNamed:@"tab_back"]不显示图片的问题解决

[UIImage imageNamed:@”tab_back”]不显示图片,而图片tab_back.png在工程里是存在的.一、原因这很可能是因为向工程中添加图片的时候,选择的是文件夹引用,而不是虚拟...
  • shuaihj
  • shuaihj
  • 2015年09月08日 11:17
  • 5433

iOS UIImage类 imageNamed方法使用不当

今天碰到这么一个问题,push到一个新页面,该页面用for循环UIImage的imageNamed 去批量加载图片,赋值给imageview,执行animationImages动画。第一次push发现...
  • qq_18505715
  • qq_18505715
  • 2017年06月06日 17:25
  • 865

万恶的imageNamed

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

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

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

iOS 正确选择图片加载方式

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

imageNamed:与imageWithContentsOfFile:的区别

Apple官方的文档为生成一个UIImage对象提供了两种方法加载图片: 1. imageNamed,其参数为图片的名字; 2. imageWithContentsOfFile,其参数也是...
  • u011421203
  • u011421203
  • 2015年05月20日 13:28
  • 1094

使用OC加载图片的两种方式及其区别

在iOS中加载图片的方式有多种,通过OC的方式主要有imageName:和imageWithContentsOfFile:两种。这两种方式如何使用,以及他们之间的区别是什么呢?下面通过两个小示例来详细...
  • MinggeQingchun
  • MinggeQingchun
  • 2016年08月17日 14:57
  • 1279

使用OC加载图片的两种方式及其区别

在iOS中加载图片的方式有多种,通过OC的方式主要有imageName:和imageWithContentsOfFile:两种。这两种方式如何使用,以及他们之间的区别是什么呢?下面通过两个小示例来详细...
  • u013406800
  • u013406800
  • 2017年05月22日 16:58
  • 592
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOS如何选择图片加载方式:imageNamed和imageWithContentsOfFile的区别
举报原因:
原因补充:

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