我有两个问题,但让我们先从更简单的问题开始,更加清楚地解释。为什么没有保留指针需要使用release?
-(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];
}
洞察从我所来自的文件,在这里从线程在计算器得知这两个混乱的明显的矛盾将非常感激。
你如何确定你的记忆是否泄漏? – borrrden 2012-08-16 02:18:19
两三分钟后(不超过),我得到两个内存警告,1和2,然后程序退出iOS。视频帧的尺寸很大,所以我认为他们正在消耗内存并且没有获得释放。我可以运行相同的代码大约半小时,并且不会收到任何警告,表明我没有泄漏内存。有更好的方法吗? – user574771 2012-08-16 02:24:59
使用随Xcode提供的仪器工具:http://www.raywenderlich.com/2696/how-to-debug-memory-leaks-with-xcode-and-instruments-tutorial – borrrden 2012-08-16 02:27:26