imageNamed imageWithContentsOfFile initWithContentsFile区别

imageNamed imageWithContentsOfFile initWithContentsFile区别


[UIImage imageNamed:]只适合与UI界面中的贴图的读取,较大的资源文件应该尽量避免使用

用UIImage加载本地图像最常用的是下面三种:

1.用imageNamed方法

[UIImage imageNamed:ImageName];

2.用 imageWithContentsOfFile 方法

NSString *thumbnailFile = [NSString stringWithFormat:@"%@/%@.png", [[NSBundle mainBundle] resourcePath], fileName];
UIImage *thumbnail = [UIImage imageWithContentsOfFile:thumbnailFile];

3. 用initWithContentsFile方法

UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath]

第一种方法为常见方法,利用它可以方便加载资源图片。用imageNamed的方式加载时,会把图像数据根据它的名字缓存在系统内存中,以提高imageNamed方法获得相同图片的image对象的性能。即使生成的对象被 autoReleasePool释放了,这份缓存也不释放。而且没有明确的释放方法。如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存。

第二种方法加载的图片是不会缓存的。得到的对象时autoRelease的,当autoReleasePool释放时才释放。

第三种方法要手动release掉。不系统缓存。release后立即释放,一般用在封面等图比较大的地方。

用imageNamed的方式加载时,系统会把图像Cache到内存。如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存,而且释放图像的 内存是一件相对来说比较麻烦的事情。例如:如果利用imageNamed的方式加载图像到一个动态数组NSMutableArray,然后将将数组赋予一 个UIView的对象的animationImages进行逐帧动画,那么这将会很有可能造成内存泄露。并且释放图像所占据的内存也不会那么简单。但是利 用imageNamed加载图像也有自己的优势。对于同一个图像系统只会把它Cache到内存一次,这对于图像的重复利用是非常有优势的。例如:你需要在 一个TableView里重复加载同样一个图标,那么用imageNamed加载图像,系统会把那个图标Cache到内存,在Table里每次利用那个图 像的时候,只会把图片指针指向同一块内存。这种情况使用imageNamed加载图像就会变得非常有效。


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后立即释放,一般用在封面等图比较大的地方。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值