-1

こんにちは、私は通常、別のクラスのオブジェクトを作成します。これが自動リリース プールにあるかどうか教えてください。または、手動でリリースする必要があります。

4

2 に答える 2

1

単純なケースは次のとおりです。init を使用する場合、release を呼び出すか 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 が含まれるもの - あなたが作成し、それをリリースします。それ以外は自動リリースされます。

于 2011-01-25T10:33:22.373 に答える
1

それらをコピーまたは新規作成する場合は、それらの割り当てを解除する必要があります。割り当てに自動解放を設定すると、それらは自動解放されます

例えば

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

Foo *foo = [[[Foo alloc] init] autorelease];// this will be autreleased
于 2011-01-25T06:59:55.327 に答える