本文主要是介绍关于 UIImage ImageNamed的内存释放。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在重构代码时,认真处理一些内存未释放的问题。看到自已的目录树图标的加载,好象没有释放内存,于是,将下面的代码做修改:
if(isExpand){cell.directoryAccessoryImageView.image = [UIImage imageNamed:@"TriangleSmall2.png"];}else{cell.directoryAccessoryImageView.image = [UIImage imageNamed:@"TriangleSmall.png"];}cell.imageView.image = [UIImage imageNamed:@"Folder.png"];
改成:
cell.directoryAccessoryImageView.image = [[UIImage imageNamed:@"TriangleSmall2.png"] autoRelease];
结果,产生内存访问错。
再改:
UIImage * img = [UIImage imageNamed:@"TriangleSmall2.png"];cell.directoryAccessoryImageView.image = img;img release];
同样报错。
查了资料,才知道自已认识上的错误:
1:对于类方法(静态方法)默认是autoRelease的。我添加的代码导致了过渡释放。所有类方法都会这样吗?我不能确定。反正这里是。
有人说:类方法创建的会自动加入到自动释放池中。
2:对于imageNamed,系统有缓存的处理,相同图片在第二次使用,会使用缓存。
3:由于2,所以在加载图片时,如果是大图片,或者不重复出现的,不要使用 imageNamed来加载图片,以避免太多的内存消耗。
学习了,记录之。
这篇关于关于 UIImage ImageNamed的内存释放。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!