我有两个问题,但让我们先从更容易混淆的问题开始。
-(void)OnNewFrameData:(NSData *)FrameData
{
UIImage * I = [UIImage imageWithData:FrameData];
[I release];
}
如果我不释放I
,我会遇到内存泄漏。然而,我从未保留I
. 有人可以解释一下吗?(FrameData
完全由调用者管理。)
然后我有另一个关于保留属性的问题。取上面相同的代码,分配I
给一个保留属性J
,然后将 nil 分配给相同的保留属性,应该没有任何泄漏,但我又泄漏了内存。我也可以释放保留的属性,但我仍然会泄漏。
@property (retain) UIImage * J;
...
-(void)OnNewFrameData:(NSData *)FrameData
{
UIImage * I = [UIImage imageWithData:FrameData];
self.J = I;
// I can also add here [self.J release]; and it still leaks...
self.J = nil;
[I release];
}
非常感谢我从文档和 stackoverflow 的线程中了解到的这两个令人困惑的明显矛盾。