Xcode, инструмент командной строки: почему NSAutoreleasePool находится в сгенерированном шаблоне? - PullRequest
0 голосов
/ 25 июня 2010

Здесь вопрос для начинающих.

Моя цель: понять логическое обоснование этого.

Когда я создал проект инструмента командной строки, который ссылается на класс Foundation, xcode сгенерировал следующий фрагмент кода.

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    // insert code here...
    NSLog(@"Hello, World!");
    [pool drain];
    return 0;
}

У меня есть общее представление о функциональности NSAutoreleasePool.Но я не понимаю, зачем нам нужен NSAutoreleasePool: в такой простой программе, когда main () завершит работу, все выделенные объекты все равно будут освобождены.

Есть ли другая причина / преимущество наличия здесь NSAutoreleasePool?

Ответы [ 2 ]

3 голосов
/ 25 июня 2010

Пул автоматического выпуска должен существовать, чтобы система управления памятью работала вообще.Вы правы в том, что [pool drain] возможно не нужен, так как ОС очистит всю память вашей программы при выходе из процесса, но она включена для ясности (и строгой корректности).

Я думаю, что гипотеза здесь заключается в том, что вы, вероятно, добавите код, который использует пул авто-релиза, поэтому они просто надеются сэкономить вам некоторую печать.

1 голос
/ 25 июня 2010

Вы правы, что при выходе из программы ее память будет восстановлена, но что делать, если ваша программа работает целыми днями без выхода (сервер или демон), и у вас нет пула автоматического выпуска, и вы не освобождаете ваши объекты. Что тогда? Ваше приложение будет продолжать использовать память до тех пор, пока - bang - вам не хватит памяти и ваша система выйдет из строя.

Именно поэтому почему существует пул автоматического выпуска.

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