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的方式加载图像。

    推荐阅读