1

NSMutableData の作成中にリークが発生しました。connectionDidFinishLoading で webData2 を解放します...

webData2 = [[NSMutableData alloc]init];

だから私はこれをテストしました:

NSMutableData *test =[[NSMutableData alloc]init];
webData2 = test;
[test release];

そして、私は命令に漏れがあります:NSMutableData *test =[[NSMutableData alloc]init];

理解できない !誰にもアイデアがありますか?

ありがとうございました!

GT

4

2 に答える 2

4

これは機能しません。の参照webData2は と同じでtestあり、リリースされます。

  1. webData2 = [[NSMutableData alloc]init]; // webData2 points to object A
  2. NSMutableData* test = [[NSMutableData alloc] init]; // test points to object B
  3. webData2 = test; // test and webData2 both points to A, nothing points to B
  4. [test release]; // object B is released, test and webData2 points to garbage

したがって、問題は 3 行目にあり、1 行目に割り当てられたオブジェクト B への明示的な参照がなくなっています。

webData2新しいオブジェクト ポインターを割り当てる前に解放する必要があります。

bbum が指摘しているように、リークは実際にリークされた場所ではなく、オブジェクトが割り当てられた場所を常に参照しています。

疑わしい場合は、静的アナライザーを使用してください (実際には、常に静的アナライザーを時々実行してください)。Xcode のBuildメニューの下にBuild and Analyzeとして表示されます。多くのエラーの中からほとんどのメモリ リークを検出し、余白に青い矢印でマークします。矢印を展開すると、割り当てから最後の参照が失われるまでのリークの完全なプログラム フローが表示されます。

于 2011-05-10T15:18:45.050 に答える
0

あなたができることは次のとおりです。

NSMutableData *test =[[NSMutableData alloc]init];
webData2 = [test copy];
[test release];

その場合、webData2 は test と一緒にリリースされません...後でリリースする必要があります。

于 2011-05-10T16:27:02.213 に答える