imageNamed 与 imageWithContentsOfFile差额

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。

假设文章对您有所帮助。欢迎给作者捐赠,支持郝萌主,捐赠数额任意。重在心意^_^ 

我要捐赠: 点击捐赠

Cocos2d-X源代码下载:点我传送


普通情况下,载入图片都例如以下:

myImage = [UIImage imageNamed:@"icon.png"];
这样的方法在一些图片非常少,或者图片非常小的程序里是ok的。


可是,在大量载入图片的程序里,请千万不要这样做。
为什么呢 ???????


这样的方法在application bundle的顶层目录寻找由供应的名字的图象 。

假设找到图片。装载到iPhone系统缓存图象。那意味图片是(理论上)放在内存里作为cache的。

试想你图片多了。是什么后果``````
图片cache极有可能不会响应 memory warnings and release its objects

所以。用图片的时候一定要小心的alloc和release


推荐使用
NSString *path = [[NSBundle mainBundle] pathForResource:@”icon” ofType:@”png”];
myImage = [UIImage imageWithContentsOfFile:path];


用UIImage载入图像的方法非常多,最经常使用的是以下两种:

    1、用imageNamed函数

[UIImage imageNamed:ImageName];

    2、用NSData的方式载入,比如:

NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
NSData *image = [NSData dataWithContentsOfFile:filePath];
[UIImage imageWithData:image];

    因为第一种方式要写的代码比較少,可能比較多人利用imageNamed的方式载入图像。


事实上这两种载入方式都有各自的特点。

    1)用imageNamed的方式载入时,系统会把图像Cache到内存。

假设图像比較大,或者图像比較多,用这样的方式会消耗非常大的内存,并且释放图像的 内存是一件相对来说比較麻烦的事情。比如:假设利用imageNamed的方式载入图像到一个动态数组NSMutableArray,然后将将数组赋予一 个UIView的对象的animationImages进行逐帧动画,那么这将会非常有可能造成内存泄露。并且释放图像所占领的内存也不会那么简单。

可是利 用imageNamed载入图像也有自己的优势。对于同一个图像系统仅仅会把它Cache到内存一次,这对于图像的反复利用是很有优势的。

比如:你须要在 一个TableView里反复载入相同一个图标,那么用imageNamed载入图像,系统会把那个图标Cache到内存,在Table里每次利用那个图 像的时候,仅仅会把图片指针指向同一块内存。这样的情况使用imageNamed载入图像就会变得很有效。

    2)利用NSData方式载入时,图像会被系统以数据方式载入到程序。

当你不须要重用该图像。或者你须要将图像以数据方式存储到数据库,又或者你要通过网络下载一个非常大的图像时,请尽量使用imageWithData的方式载入图像。

    不管用哪种方式载入图像,图像使用结束后,一定要记得显示释放内存。

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。

假设文章对您有所帮助。欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 

我要捐赠: 点击捐赠

Cocos2d-X源代码下载:点我传送


版权声明:本文博主原创文章。博客,未经同意不得转载。

原文地址:https://www.cnblogs.com/gcczhongduan/p/4855560.html