iOS-imageNamed与imageWithContentsOfFile的区别

iOS中根据本地icon加载出一个UIImage对象有两种方法:
  • imageNamed:
UIImage *img =  [UIImage imageNamed:@"pic"];

*imageWithContentsOfFile:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"png"];
UIImage *img =  [UIImage imageWithContentsOfFile:filePath];
那么这两种方式有什么区别吗?
imageNamed:方法
  • 后面的参数是icon的名字.图片可以存在项目(bundle)中,也可以存在Assets中。
  • 这个方法只适合一些中小型的图片读取,而一些比较大的资源图片并不适合用这个方法。
  • 这个方法加载完图片后会存在Cache里面,当用这个方法加载的时候,它会在系统缓存中查找并返回一个对象,如果缓存中没有找到对应的对象,这个方法会从指定的文档中加载,再返回对象。
优缺点
  • 优点 当你需要在一个TableView里的Cell里都加载同样一个图标的时候,那么用imageNamed加载图像效率很高。系统会把那个图标Cache到内存,在TableViewCell里每次需要这个图像的时候,只会把图片指针指向同一块内存。
  • 缺点 由于这个方法会把加载的图片存入缓存,虽然提高了运行速度,但是非常消耗内存,一些图片只需要加载一次,根本不会再次使用,但是还是会被加载到内存中.这样做非常消耗内存,尤其是加载一些大图的时候.当内存过大时,会出现内存警告,或者内存泄漏.虽然现在苹果手机内存做了提升,但是还是有必要注意的。
imageWithContentsOfFile:方法
  • 后面的参数是图片的路径
  • 这个方法加载图片时,会根据路径查找,直接加载,使用完后释放,不会存入内存
  • 这个方法适合一些不常用的图片或icon,或者资源比较大图片
优缺点
  • 优点 可以节省内存
  • 缺点 消耗性能

总结: 一些小的icon可以存在Assets里面。用imageNamed:加载。一些比较大的,使用频率低的可以建立一个bundle存放图片,使用imageWithContentsOfFile:加载。


本文参考iOS中imageNamed与imageWithContentsOfFile的区别,非常感谢该作者。


  • 如有错误,欢迎指正,多多点赞,打赏更佳,您的支持是我写作的动力。

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

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,520评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,135评论 1 32
  • OC语言基础 1.类与对象 类方法 OC的类方法只有2种:静态方法和实例方法两种 在OC中,只要方法声明在@int...
    奇异果好补阅读 4,313评论 0 11
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,003评论 3 119
  • 爸爸,记得您说,姥爷是地主。爷爷继承家业,同样成了地主。可是赶上“打土豪,分土地”的时代,再加上文革十年浩荡,家里...
    善护念之合一阅读 331评论 8 8