2011-05-01 20 views
0

可能性の重複:
Cocoa Memory Management NSArray with ObjectsNSMutableArrayのオブジェクトを解放する必要がありますか?

私はNSMutableArrayのは、いくつかのオブジェクトで満たされています。例えば

:複数のオブジェクトがその配列への参照が必要な場合

... 
id test = [NSObject new]; 
NSMutableArray *myArray = [NSMutableArray new]; 
[myArray addObject: test]; 
... 

、私はこの方法を使用することはできません「 - removeAllObjectsを」。 私は自分のクラスの " - dealloc"メソッドで配列のリリースのみを使用します。

- (void)dealloc { 
    [myArray release]; 
    [super dealloc]; 
} 

だから漏れた名前「テスト」と私のオブジェクトであり、したがって、私はより多くを行う必要があるのですか?

NSMutableArrayの "dealloc"または "release"メソッドの説明はドキュメントにありません。 NSObjectリファレンスでは、NSMutableArrayについては説明しません。 "Memory Management Programming Guide"のどこにいてもかまいません(希望)。

+0

可能な重複:[1](http://stackoverflow.com/questions/4822768/)[2](http://stackoverflow.com/questions/3795615/)[3](http:// stackoverflow。 (6)(http:// stackoverflow)/ /質問/ 2411520 /)[4](http://stackoverflow.com/questions/4241283/)[5](http://stackoverflow.com/questions/4570411/) –

答えて

3

alloc、new、retain、またはcopyのいずれかを使用して、所有するもののみをリリースします。

あなたは

id test = [NSObject new]; 

を行った後あなたがテストを所有しているので、あなたは、配列に追加するかどうか、それを解放する責任があります。

あなたは

id test = [[NSObject new] autorelease]; // or any autoreleased convenience methods 

を行う場合は、配列またはコレクションの他のいくつかの形でそれを置く場合でも、あなたはすでにテストの所有権を与えてくれたので、あなたはそれを解放するべきではありません。コレクションは所有権を取得します。

自分が所有するものだけをリリースする必要があります。

5

コンテナは、コンテナが破棄されたりオブジェクトがオブジェクトから削除されたりすると、そのオブジェクトを保持して解放します。オブジェクトはコンテナに追加された後に解放する必要があります(コンテナに保持されているため、オブジェクトを保持する必要がなくなります)。

+1

これは、オブジェクトをコンテナに追加した後でオブジェクトを解放する必要があることを意味します。**あなたがそれらを所有している場合**。したがって、提供された例( '+ new')では、オブジェクトをコンテナに追加した後にオブジェクトを解放する必要があります。しかし、オブジェクトの所有権を自動解放プールに移した場合(オブジェクトに '-autorelease'を送ることによって)、解放してはいけません。 –

+2

これを清掃していただきありがとうございます。 – DavidN

関連する問題