0

以下のシナリオがあるとしましょう:

- (void)someFunction:(id)param {

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSObject *objectA = [[NSObject alloc] init];
    [objectA doStuff];  // Don't need to release objectA because of the pool

    if (!someValue) {
        [pool release];   // Doubt here
        return;
    }

    NSObject *objectB = [[NSObject alloc] init];
    [objectB doStuff];  // Don't need to release objectB because of the pool

    [pool release];
}

このようにプールブロック内から戻るのは正しいですか?

4

1 に答える 1

2

簡単な答え:はい。

長い答え:明示的な解放なしに放棄されたプールは、ネストされている自動解放プール(通常は現在のスレッドの最上位の自動解放プール)が解放されたときに解放されます。

ところで、これは間違っています:

NSObject *objectA = [[NSObject alloc] init];
[objectA doStuff];  // Don't need to release objectA because of the pool

割り当てられたオブジェクトを明示的に解放する必要があります。

NSObject *objectA = [[NSObject alloc] init];
[objectA doStuff];
[objectA release];

または、それらを自動解放プールに追加します。


NSObject *objectA = [[[NSObject alloc] init] autorelease];
[objectA doStuff];
于 2011-02-22T20:53:54.557 に答える