оператор возврата внутри области действия nsautoreleasepool - PullRequest
0 голосов
/ 22 февраля 2011

Допустим, у меня есть следующий сценарий:

- (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];
}

Правильно ли возвращаться изнутри блока пула таким образом?

1 Ответ

2 голосов
/ 22 февраля 2011

Краткий ответ: да.

Длинный ответ: пул, который был оставлен без явного освобождения, освобождается при освобождении пула автоматического выпуска, в который он вложен (обычно это верхний пул автоматического выпуска текущего потока).

Кстати, это неправильно:

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];
...