2011-12-21 16 views
0

私は_contentsというNSMutableArrayを含むクラスを持っています。この配列はこのクラスのインスタンスの作成時に初期化され、コンテンツにオブジェクトを追加するメソッドsetContentsObject:があります。NSArrayにオブジェクトを追加するのは漏れですが、なぜですか?

- (void)addContentsObject:(id <MyProtocol>)object 
{ 
    [_contents addObject:object]; 
} 

非常にシンプル、かつそれが動作しますが、私はリーク機器を使用して私のアプリの実行を分析するとき、私は1つ上の報告漏れ(ラベル「100%」)を取得する:これはsetContentsObjectの実装ですその方法のライン。私はaddObject:オブジェクトを保持していることを理解していますが、これまでにこの問題が発生したことはありませんでした。このメソッドに何ができるのか分かりません。

+3

あなたの配列は決して解放されません。または、追加しているオブジェクトが既に保持されている(オートレリースされていない)かもしれません。 –

+0

あなたのコードの多くを見ることなく、私はあなたを助けることができるかわかりません。 –

答えて

-1

私はそれがobj-Cは、メソッド名の表示方法に関係していますかなり確信しています。接頭辞が-copy -addまたは-newのものは、返されたオブジェクトに保持カウントを追加します。このようにするつもりがない場合は、メソッドの名前を一度変更して、まだ漏れていないかどうかを確認してください。私の推測はそうではありません。

+0

メソッドの名前は、メソッドの動作には影響しません。 (名前*はAnalyzeコマンドで使用されます) –

+0

ARCが有効になっていない場合。 –

0

私はのaddObject漏れや単には、insertObjectでその行を置き換えるのインスタンスに走っています:atIndex修正それ。私はいくつかのリークテストを実行することによってそれを証明しました。

さて、私はあなたにそれが漏れたとするとき、なぜの正確な理由を与えることができますか?実際はそうではありません...私は推測し、後者がより正確であると言うことができます。私は間違いなく、それは私の問題を修正し、単にバグ:)

0

より多くのコードなしに伝えることは不可能として、それを分類し知っています。しかし、addObject:はあなたが渡したものを保持します。したがって、配列がオブジェクトを所有していると考えることができ、addContentsObject:メソッドを呼び出すと解放できます。

そして、誰もが、すべての配列を解放しない場合に述べたホット・リックスとして、それが所有するすべてのオブジェクトも同様にたむろします。あなたがリーク機器でやりたいことは何

はあなたのリークしたオブジェクトのいずれかを見て、すべての参照を参照してくださいです。

ああ、あなたはARCへの切り替えを検討する必要があります。

関連する問題