2011-01-11 15 views
0

私は現在デモアプリケーションに取り組んでいますので、私は物事をやり遂げる方法が少しうっすらとしていましたが、どれくらいのリークがあるかを見るために "Build and Analyze"を実行します。 TEH probleのオブジェクトを配列から解放する方法は?

ソースは、私はNSMutableArrayのを持っていると私はそれにいくつかのオブジェクトを追加することです:

NSMutableArray *arr = [[NSMutableArray alloc] init]; 
[arr addObject:[[MyObject alloc] initWithText:@"Option1"]]; 
// I have like 100 lines like that and 100 complains 

、Xcodeは潜在的な漏れについて文句を言います。

誰かが私にそれをどう対処するための助言を与えることができますか?

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

+0

あなたは作成したオブジェクトを所有しています(http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html%23//apple_ref/doc/uid/20000043- SW1)あなたはいつでもarrを解放していますか?最後に、addObjectメソッドとは別にオブジェクトを作成し、addObjectで渡してから解放することをお勧めします(詳細はhttp://stackoverflow.com/questions/179665/nsmutablearray-destructionを参照してください) – ndtreviv

答えて

3

問題は、リリースする責任があるMyObjectのインスタンスを割り当てていることです。配列に渡すと、配列にもオブジェクトが保持されるので、あなたと配列の両方がそれを解放する必要があります。オブジェクトautoreleaseを単純に使うことができます。配列からオブジェクトを削除するか、配列自体を破棄するまで、配列はオブジェクトを保持したままにします。

2

[arr addObject:[[[MyObject alloc] initWithText:@"Option1"] autorelease]]; 

[arr addObject:[[MyObject alloc] initWithText:@"Option1"]]; 

を交換し

ほとんどのコレクション(配列、辞書は)彼らに追加​​されたオブジェクトを所有しています。また、+allocMyObjectに送信したため、インスタンス化されたばかりのオブジェクトも所有しています。メモリ管理ルールによると、は、オブジェクトの所有権を放棄する責任を負います。新しくインスタンス化されたオブジェクトに-autoreleaseを送信すると、それが実行されます。

関連する問題