これは機能しません。の参照webData2
は と同じでtest
あり、リリースされます。
webData2 = [[NSMutableData alloc]init]; // webData2 points to object A
NSMutableData* test = [[NSMutableData alloc] init]; // test points to object B
webData2 = test; // test and webData2 both points to A, nothing points to B
[test release]; // object B is released, test and webData2 points to garbage
したがって、問題は 3 行目にあり、1 行目に割り当てられたオブジェクト B への明示的な参照がなくなっています。
webData2
新しいオブジェクト ポインターを割り当てる前に解放する必要があります。
bbum が指摘しているように、リークは実際にリークされた場所ではなく、オブジェクトが割り当てられた場所を常に参照しています。
疑わしい場合は、静的アナライザーを使用してください (実際には、常に静的アナライザーを時々実行してください)。Xcode のBuildメニューの下にBuild and Analyzeとして表示されます。多くのエラーの中からほとんどのメモリ リークを検出し、余白に青い矢印でマークします。矢印を展開すると、割り当てから最後の参照が失われるまでのリークの完全なプログラム フローが表示されます。