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