我有兩個問題,但讓我們先從更簡單的問題開始,更加清楚地解釋。爲什麼沒有保留指針需要使用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