質問が 2 つありますが、まず、単純さゆえに明らかに混乱しやすい質問から始めましょう。
-(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];
}
ドキュメントとスタックオーバーフローのスレッドの両方から学んだことから、これら 2 つの紛らわしい明らかな矛盾についての洞察をいただければ幸いです。