您的位置:首页 > 其它

转:类别,属性,成员变量,arc学习总结

2014-11-30 18:39 239 查看
在重构代码时,认真处理一些内存未释放的问题。看到自已的目录树图标的加载,好象没有释放内存,于是,将下面的代码做修改:

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"];  <span style="margin: 0px; padding: 0px; line-height: 1.8; color: rgb(255, 0, 0);"> //imageNamed 是类的静态方法</span>
cell.directoryAccessoryImageView.image = img;
img release];


同样报错。

查了资料,才知道自已认识上的错误:

1:对于类方法(静态方法)默认是autoRelease的。我添加的代码导致了过渡释放。所有类方法都会这样吗?我不能确定。反正这里是。

有人说:类方法创建的会自动加入到自动释放池中。

2:对于imageNamed,系统有缓存的处理,相同图片在第二次使用,会使用缓存。

3:由于2,所以在加载图片时,如果是大图片,或者不重复出现的,不要使用 imageNamed来加载图片,以避免太多的内存消耗。

学习了,记录之。

转:/article/7907888.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: