IOS UIImage常用的加载图片有3种方式

作者: gb18030    时间: 2011-7-14 15:52     标题: 求解图片的加载方式

UIImage常用加载图片有3种方式,imageWithContentsOfFile、initWithContentsOfFile、imageNamed,我知道第三个会把图片缓存再内存里不利于释放的,但是小弟三个方法各有什么优劣,哪个可以更有效的管理内存不是很清楚,希望有大牛解析下~
作者: tinyfool    时间: 2011-7-14 16:02

imageWithContentsOfFile = [[initWithContentsOfFile:xxxx] autorelease]

imageNamed会把图片缓存,而且没有明确的释放方法。

一般来说,如果你大量装载,大量释放,如果在一个循环里,那么autorelease是需要循环结束才能真的释放的,而init方法和release可以成对写,这样当然就效果很好,内存不会累积。

但是如果没有特别大的量,imageWithContentsOfFile足以了。

如果有一个图片是界面用图,无论如何也不会释放,那么imageNamed很合适了。或者说imageNamed一般用在不那么动态的时候,主要是省事儿用的。
作者: gb18030    时间: 2011-7-14 16:05

那么可以理解为imageWithContentsOfFile是等同于initWithContentsOfFile的release版吧
这两个方法需要自己去手动release来加强管理么
作者: tinyfool    时间: 2011-7-14 16:08

imageWithContentsOfFile是等同于initWithContentsOfFile的autorelease版

imageWithContentsOfFile肯定不能release了

initWithContentsOfFile如果不自己加autorelease的话,就必须加release
作者: gb18030    时间: 2011-7-14 16:13

理解了,自己看总有点晕晕的
应该去道具里在开个鲜花卡,这样可以送花
作者: tinyfool    时间: 2011-7-14 16:18

哈哈,
作者: NEReader    时间: 2011-7-15 11:53

UIImage常用的加载图片有3种方式: imageNamed , imageWithContentsOfFile , initWithContentsFile  .

imageNamed:
     UIImage image = [UIImage imageNamed:@"image.gif"] . 得到的对象是autoRelease的。这个方法有点特殊,它在生成image对象的同时,会把图像数据    根据它的名字缓存在系统内存中,以提高imageNamed方法获得相同图片的image对象的性能。即使生成的对象被 autoReleasePool释放了,这份缓存也不释放。这对与在应用中有大量相同图片时,非常有用,可以提高性能和内存利用率。

imageWithContentsOfFile :
     UIimage image = [UIImage imageWithContentsOfFile:@"path"] 。得到的对象时autoRelease的,当autoReleasePool释放时才释放。不系统缓存。

initWithContentsFile
     UIimage image = [[UIImage alloc] init initWithContentsFile] 。 的到的对象没用后,要手动release掉。不系统缓存。release后立即释放,一般用在封面等图比较大的地方。
作者: NEReader    时间: 2011-7-15 18:01

使用imageNamed方式,用同一张图片贴多个imageView应该是经过极大的优化,耗时和内存都极小,而使用imageWithContentsOfFile则有巨大消耗:

                           生成的UIImage对象内存地址  生成10万个相同文件名   使用相同文件名的185
                                                                       的UIImage对象的内    个 UIImageView对象
                                                                      存 及耗时                     进行贴图
                                                                     
                                                                    内存:28.70M->32.90M  内存:29.69M-32.84M
imageNamed方式   同一个内存地址                  耗时:瞬时                     耗时:瞬时   

imageWith                                                   内存:29.38M->300.96M 内存:30.21M->537.57M
ContentsOfFile       各不相同的内存地址           耗时:30秒                      耗时:40秒以上
方式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值