为什么这个泄漏记忆?UIImage`cellForRowAtIndexPath:`

Emi*_*mil 0 iphone memory-leaks memory-management objective-c uiimage

Instruments'Leaks告诉我这个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];
Run Code Online (Sandbox Code Playgroud)

(类单元格(自定义表格视图单元格)也在dealloc方法中释放cellImage).

我不知道为什么它会泄漏,但肯定是这样.图像以cellForRowAtIndexPath:-method 多次加载.前三个单元的图像不会泄漏(130px高,所有空间都可用).

泄漏没有给我任何其他信息UIImage allocated here in the code leaks.

你能帮我解决一下吗?谢谢 :)

ric*_*son 5

如果图像是a,你在那里的代码是正确的@property.您可以通过执行self.property = nil来释放@property,因为setter的工作方式.setter释放旧对象并将ivar设置为值.为了解决这个问题,你需要先放[image release].这里发生的是你将图像设置为nil然后你实际上是在做什么[nil release].旧图像只是漂浮在某处.所以解决这个问题的方法如下:

[image release];
image = nil;
Run Code Online (Sandbox Code Playgroud)