Автозапуск пулов в контексте цикла for - PullRequest
1 голос
/ 05 июля 2010

Я читал Руководство по управлению памятью для ОС IPhone, и я не понял пункт в листинге раздела «Автозапуск пулов» - 1 пример кода:

void main()
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSArray *args = [[NSProcessInfo processInfo] arguments];

for (NSString *fileName in args) {

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

    NSError *error = nil;
    NSString *fileContents = [NSString stringWithContentsOfFile:fileName
                                       encoding:NSUTF8StringEncoding error:&error];

    /* Process the string, creating and autoreleasing more objects. */

    [loopPool release];
}

/* Do whatever cleanup is needed. */
[pool drain];

exit (EXIT_SUCCESS);
} 

В нем говорится:

"... Кроме того, любые автоматически выпущенные объекты, созданные в контексте цикла for (например, fileName), освобождаются при освобождении loopPool, даже если им явно не отправлено сообщение автоматического выпуска."

Дело в том, что я не понял, как переменная fileName включена во второй пул (loopPool), а не в первый (пул).Разве fileName не создается, когда первый пул является самым верхним из пулов в стеке пулов?

1 Ответ

1 голос
/ 05 июля 2010

Вы правы.fineName находится во внешнем пуле.Если это так в документации, это ошибка.

Редактировать: Не стесняйтесь подавать отчет об ошибке в радарной системе Apple.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...