仪器泄漏告诉我这个UIImage正在泄漏:
UIImage *image = [[UIImage alloc] initWithContentsOfFile:[imagesPath stringByAppendingPathComponent:[NSString stringWithFormat:@"/%@.png", [postsArrayID objectAtIndex:indexPath.row]]]];
// If image contains anything, set cellImage to image. If image is empty, try one more time or use noImage.png, set in IB
if (image != nil){
// If image != nil, set cellImage to that image
cell.cellImage.image = image;
}
image = nil;
[image release];
(类单元格(自定义表格视图单元格)也在dealloc方法中释放cellImage。)
我还没有弄清楚为什么会泄漏,但肯定是这样。
图像在cellForRowAtIndexPath:
- 方法中多次加载。前三个单元的图像不会泄漏(130px高,所有空间都可用)。
泄漏给了我一个除UIImage allocated here in the code leaks
之外的其他信息。
答案 0 :(得分:5)
如果图片是@property
,那么您的代码就是正确的。您可以通过执行self.property = nil来释放@property,因为setter的工作方式。 setter释放旧对象并将ivar设置为值。为了解决这个问题,您需要先放置[image release]
。这里发生的是你将image设置为nil,然后你基本上在做[nil release]
。旧图像只是漂浮在某处。所以要解决这个问题,请执行以下操作:
[image release];
image = nil;
答案 1 :(得分:3)
您在调用nil
之前将其设置为release
。因此,您要发布nil
而不是image
。
更改自:
image = nil;
[image release];
为:
[image release];
image = nil;
答案 2 :(得分:0)
稍微修改代码
UIImage *image = [[UIImage alloc] initWithContentsOfFile:[imagesPath
stringByAppendingPathComponent:[NSString stringWithFormat:@"/%@.png",
[postsArrayID objectAtIndex:indexPath.row]]]];
if (image){
cell.cellImage.image = image;
[image release];