0

サンプルコード:

- (Foo*)createFoo {
    Foo *foo = [[Foo alloc] init];
    return foo;
}

- (void)someOtherMethod {
    Foo *foo;
    foo = [self createFoo]; //retain count 1
    [foo release]; //retain count = 0 => object gets released?

    //repeat
    foo = [self createFoo];
    [foo release];
}

質問:createFooで自動解放する必要がありますか、それともsomeOtherMethodで返されたオブジェクトを解放できますか?

4

2 に答える 2

0

この場合のコードは、呼び出し元のコードに所有権を譲渡するときにオブジェクトを自動解放する必要があります。メソッド内での責任を負わないようにする必要があるため、保持を放棄する必要があります。

NARCを覚えておいてください-これらのキーワードで始まるメソッドは自動解放されないと想定されています...

新規、割り当て、保持、コピー

メソッドに名前が付けられている場合、newFooまたはcopyFoo上記のコードは自動リリースなしで問題ありません。

于 2011-10-26T15:11:11.977 に答える
0

誰もが一連のルールに固執するため、Cocoaのメモリ管理は実際には非常に簡単です。あなたはそれらの規則に従わないので、あなたは問題にぶつかるでしょう。

基本的なメモリ管理ルールをお読みください。あなたがそれらの規則に従うことに固執するならば、あなたは大丈夫であるはずです。

于 2011-10-26T15:16:29.990 に答える