(UIImage *)imageNamed

来源:互联网 发布:局域网网络硬盘服务器 编辑:程序博客网 时间:2024/05/17 22:54


 

+ (UIImage *)imageNamed:(NSString *)name导致的内存问题

这种方法在application bundle的顶层文件夹寻找名字的图象 , 如果找到图片, 系统缓存图象。图片内容被加载到系统内存中,使用时直接引用到系统内存。 

所以当图片比较大时,程序使用的内存会迅速上升导致内存警告并退出。 

特别在使用Interface Builder建立界面时,如果直接拖动UIImageView 并设置image的图片名称。InterfaceBuilder 正是通过UIImage 类的imageName方法加载图片。图片被缓存,导致内存使用较大。且无法释放,即使release掉 UIImageView也无济于事。 

所以推荐使用+ (UIImage *)imageWithContentsOfFile:(NSString *)path方法加载图片。 

也可以重载 imageNamed方法。 

@implementation UIImage(imageNamed_Hack) 

+ (UIImage *)imageNamed:(NSString *)name { 

return [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] bundlePath], name ] ];


@end 

Note: With this override you will not have any cache loading UIImages, if you need this, 

you will have to implement your own cache. 

Tip: If your applications use much image processing, consider to use de PhotoshopFramework 

for iPhone. Check here: http://sourceforge.net/projects/photoshopframew/

原创粉丝点击