2012-01-24 18 views
-1

xcodeの 'analyze'ツールを使用して、アプリ内の潜在的なリークをチェックしています。'潜在的なリーク'の問題を解決する方法

結果として、次の警告が表示されています。

enter image description here

どのように私は上に示した潜在的な漏れを解決するのですか? 「self.answerArrayは」私はあなたがアレイ上mutableCopy呼ばれてきました

enter image description here

答えて

1

私のヘッダファイルで宣言されたばかりの配列である(+1の保持カウントして新しい配列を返します - あなたはそれを所有します)あなたはそれをプロパティに割り当てます(これは強/保持プロパティとみなします)、それを解放していません。あなたは記憶を漏らしています。

tempArrayをプロパティに割り当ててからリリースする必要があります。プロパティがクラス 'deallocメソッドで公開されていることを確認してください。

+0

ああ、変更可能なコピーが保持カウントを増加させることはわかりませんでした。応答ありがとう – Zhen

+0

名前にCopy、Alloc、RetainまたはNewが付いているものは、表記法に従って発信者が所有しています。私はいつもそれをCARNルールと考えていました:) – Jasarien

0

あなたはこのようコンパイラにはリリースが生成されますプロパティを宣言

@property (retain) NSArray* answerArray; 

、より良いおそらく、answerArrayへ/リリースを(新しいオブジェクトを保持して、新しいものを割り当てる前に、古いオブジェクトを解放する)を保持送ったりすべきであるのいずれか/あなたのために(割り当てに)保持します。 documentationを参照してください。さもなければ、割り当て(answerArray = tempArray)がメモリにぶら下がる前にオブジェクトanswerArrayが参照していました。

あなたがプールを自動解放するためにあなたの一時変数を追加することを確認し、宣言されたプロパティを使用します場合:

tempArray = [[self.answerArray mutableCopy]autorelease]; 

またはちょうど(それがスコープの外に出る直前に)自分自身を解放し、それを送信します。

関連する問題