ios 图片加载方式,内存控制,尽量避免使用imageNamed,使用ARC也需要

1.为什么尽量避免使用imageNamed?

使用这种方式生成的对象被autorelease之后,图片依然存在于内存,并不会及时回收,并且没有明确的释放方法。如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存。

这是为什么?如果对于大量同一图片的复,使用这个方法可行。以这种方式加载的图片会缓存一份在内存中,以后如果发现有同名的图片,则不会再次加载。缺点是这份缓存无法预知释放时间与条件。

2.最好使用方式:imageWithContentsOfFile,根据文件路径加载图片。这种方式加载的图片不会缓存在内存中,当对象被释放之后,图片也会被释放。

    #define recourcesPath [[NSBundle mainBundle] resourcePath]

    NSString * imageFile = [[NSString alloc] initWithFormat:@"%@/%@",recourcesPath, filename];

UIImage * tempImage = nil;
    tempImage = [[UIImage alloc] initWithContentsOfFile:imageFile];
    [imageFile release];
    imageFile = nil;

这样得到的图片tempImage,并不是autorelease,这可以手动释放,释放的时候已将图片从内存中清除,可控内存是它的优点。

3.2中提到的加载方式,可以封装成一个类似于imageNamed的方法。新建一个UIImage Category,将2中的代码封装成一个函数即可。


参考:http://www.cnblogs.com/zeejun/archive/2012/05/08/2485535.html

参考:stackoverflow.com

DEMOURL : http://download.csdn.net/detail/take8619702/4918991

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值