ios 图片加载方式,内存控制,尽量避免使用imageNamed,使用ARC也需要

来源:互联网 发布:linux imwallet 编辑:程序博客网 时间:2024/05/17 16:56

1.为什么尽量避免使用imageNamed?

使用这种方式生成的对象被autorelease之后,图片依然存在于内存,并不会及时回收,并且没有明确的释放方法。如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存。

这是为什么?如果对于大量同一图片的复,使用这个方法可行。以这种方式加载的图片会缓存一份在内存中,以后如果发现有同名的图片,则不会再次加载。缺点是这份缓存无法预知释放时间与条件。

2.最好使用方式:imageWithContentsOfFile,根据文件路径加载图片。这种方式加载的图片不会缓存在内存中,当对象被释放之后,图片也会被释放。

    #define recourcesPath [[NSBundle mainBundle] resourcePath]

    NSString * imageFile = [[NSString alloc] initWithFormat:@"%@/%@",recourcesPath, filename];

UIImage * tempImage = nil;
    tempImage = [[UIImage alloc] initWithContentsOfFile:imageFile];
    [imageFile release];
    imageFile = nil;

这样得到的图片tempImage,并不是autorelease,这可以手动释放,释放的时候已将图片从内存中清除,可控内存是它的优点。

3.2中提到的加载方式,可以封装成一个类似于imageNamed的方法。新建一个UIImage Category,将2中的代码封装成一个函数即可。


参考:http://www.cnblogs.com/zeejun/archive/2012/05/08/2485535.html

参考:stackoverflow.com

DEMOURL : http://download.csdn.net/detail/take8619702/4918991

原创粉丝点击