iOS|iOS imageNamed和imageWithContentsOfFile区别
1.imageNamed:
UIImage image = [UIImage imageNamed:@"pic.png”]
//文件名
//有缓存
获取到的对象是autorelease的。
这个方法有点特殊,它在生成image对象的同时,会把图像数据 根据它的名字缓存在系统内存中,以提高imageNamed方法获得相同图片的image对象的性能。
即使生成的对象被 autoreleasePool释放了,这份缓存也不释放。
这对与在应用中有大量相同图片时,非常有用,可以提高性能和内存利用率。
2.imageWithContentsOfFile :
UIimage image = [UIImage imageWithContentsOfFile:@"path"]
//文件路径
//无缓存
【iOS|iOS imageNamed和imageWithContentsOfFile区别】得到的对象时autoRelease的,当autoReleasePool释放时才释放。
不系统缓存。
3.initWithContentsFile:
UIimage image = [[UIImage alloc] init initWithContentsFile]
//文件路径
//无缓存
获取到的对象没用后,要手动release掉。不系统缓存。
release后立即释放,一般用在封面等图比较大的地方。
根据各自的优缺点来选择性的使用相应的方法. 使用imageNamed方式,用同一张图片贴多个imageView应该是经过极大的优化,耗时和内存都极小,而使用imageWithContentsOfFile则有巨大消耗。
当图片文件较小 , 使用比较频繁的时候那么使用 imageNamed 比较好.例如:UITableViewCell , UICollectionCell 等加载同一个图标的时候 , 在Table里每次利用那个图像的时候,只会把图片指针指向同一块内存。可以直接从缓存中取的数据而不用遍历整个工程.在这种情况下 imageNamed 的效率还是非常高的.同一个图片对象系统只会把它 Cache 到内存一次 , 这对图像的重复利用是非常有优势的.
你用第2/3种方式加载的时候 , 图像会被系统以数据的形式加载到程序 . 当你不需要重用该图像,或者你需要将图像以数据方式存储到数据库,又或者你要通过网络下载一个很大的图像时,请尽量使用imageWithData的方式加载图像。
推荐阅读
- 急于表达——往往欲速则不达
- 第三节|第三节 快乐和幸福(12)
- 20170612时间和注意力开销记录
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- 对称加密和非对称加密的区别
- 眼光要放高远
- 樱花雨
- 前任
- 2020-04-07vue中Axios的封装和API接口的管理
- 烦恼和幸福