2011-01-25 8 views
-1

こんにちは私は一般的に別のクラスのオブジェクトを作成します。このリリースが自動リリースプールにあれば私に電話してもらえますか?手動でリリースする必要があります。別のクラスのDeallocオブジェクト

+2

あなたは、いくつかのコードを表示したり、あなたの質問をよりよく説明したりする必要があります。あなたが作成するオブジェクトの中には、オートレリースされているものもあれば、そうでないものもあります。 –

答えて

1

あなたinitは、それらをコピーするか、または新しい場合は、割り当てにautorleaseを入れ、その後、彼らは例えば

Foo *foo = [[Foo alloc] init]; //you'll have release it somewhere yourself 

そして

Foo *foo = [[[Foo alloc] init] autorelease];// this will be autreleased 
を自動解放される場合は、それらの割り当てを解除する必要があります
1

単純なケースは、initを使用する場合、リリースを呼び出すか、またはautoreleaseを呼び出して、initをリリースする必要があります。

NSString *myString = [NSString alloc] init]; // You need to release this 
... 
[myString release]; // Now it's released - don't use it again! 

またはあなたが

NSString *myString = [NSString alloc] init]; // This needs releasing 
... 
return [myString autorelease]; // You are finished with it but someone else might want it 

他の誰かにそれを与える行っている場合は、他のいくつかの例があります。

NSString *myString = [NSString stringWithFormat:@"hi"]; 

このオブジェクトは既に自動解放プールにあります。解放しないでください。

NSString *secondString = [myString copy]; 

このオブジェクトは解放する必要があります - それはが自動解放ではありません。

親指の規則:名前にinit、copy、またはnewが付いているものはすべてあなたがリリースしました。それ以外はオートリリースされます。

+1

親指のルールは正しくありません。 'init'ではなく' release'を要求する 'alloc'であり、' new'もありません。 – danyowdee

+0

Blast、私はいつも 'new'を忘れています:(私は私の答えを編集しました、ありがとう! – deanWombourne

関連する問題