码迷,mamicode.com
首页 > 移动开发 > 详细

初学IOS遇到的问题(二)UIImage加载图片遇到的问题

时间:2016-04-19 14:17:13      阅读:601      评论:0      收藏:0      [点我收藏+]

标签:

问题产生过程:

图片资源放在Assets.xcassets中,分别用UIImage的类方法imageNamed和imageWithContentsOfFile获取图片对象,但发生奇怪的情况,前者获取到图片对象,后者结果为nil。代码如下:

1.通过UIImage的类方法imageNamed:可以获取到图片对象。

NSString *imageName = @"test.jpg";

UIImage *img = [UIImage imageNamed:imageName];

 

2.但通过UIImage的类方法imageWithContentsOfFile:得到img为nil

NSString *imageName = @"test.jpg";
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:imageName ofType:nil];
UIImage *img = [UIImage imageWithContentsOfFile:path];

 

原因分析:

其实,UIImage创建对象有两种方法:

  •  imageNamed:创建的对象会缓存到系统内存中,不会立即释放到内存。好处是再次加载使用这种方式会减少读取操作,加快程序运行。缺点:加载过多图片会占用大量内存空间。
    1. 创建图片对象,首先在缓存中查找是否有该对象,有则直接取出对象,
    2. 没有则从bundle中查找图片资源,有则创建对象并返回。
    3. bundle中也没有图片资源,则返回nil。
  •  imageWithContentsOfFile:mageWithContentsOfFile创建的对象不会缓存到系统内存中。好处是不产生缓存。缺点:对于经常使用的小图片,会频繁读取。

imageNamed只需传文件名,imageWithContentsOfFile需要传入文件全路径。 而通文件全路径可以通过NSBundle对象方法 pathForResource: ofType:得到。这时候要注意:Assets.xcassets图片资源不能通过NSBundle对象方法 pathForResource: ofType:获得。想获取Assets.xcassets图片资源只能使用imageNamed:。

解决方法:

     把图片资源放在Assets.xcassets外的目录。

初学IOS遇到的问题(二)UIImage加载图片遇到的问题

标签:

原文地址:http://www.cnblogs.com/Zev_Fung/p/5407642.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!