Где создан и удален пул автоматического выпуска для приложения OS X? - PullRequest
4 голосов
/ 17 ноября 2011

Я рефакторинг моего приложения OS X для ARC. Открыв файл main.m, я был уверен, что найду экземпляр и сток Autorelease Pool (как проекты iOS), но, к моему большому удивлению, его там не было.

Итак, мой первый вопрос:

  • Где находится основной пул авто-релиза?

Мой следующий вопрос:

  • Если основной пул автоматического выпуска не создан, нужно ли его создавать? Или автоматически выпущенные объекты освобождаются каким-то автоматическим способом?

Ответы [ 2 ]

6 голосов
/ 17 ноября 2011

Ваш файл main.m должен иметь следующий вызов:

NSApplicationMain(argc, (const char **)argv);

NSApplicationMain() отвечает за создание приложения, т. Е. Экземпляр NSApplication, который, в свою очередь, отвечает за создание пулов автоматического выпуска:

Класс NSApplication устанавливает пулы автоматического выпуска (экземпляры класса NSAutoreleasePool) во время инициализации и внутри цикла событий, в частности, в рамках его инициализации(или sharedApplication) и методы запуска.

Это означает, что в общем случае вам не нужно беспокоиться о создании пулов с автоматическим выпуском, поскольку NSApplication уже делает это как при инициализации, так и вцикл событий.Существуют ситуации, когда создание собственных пулов автоматического выпуска может быть необходимым / желательным, например, метод с циклом, который создает много автоматически выпущенных объектов.В этом случае хорошей идеей будет создание пула автоматического выпуска для каждой итерации цикла.

1 голос
/ 21 декабря 2011

Как это часто бывает, эта тема очень хорошо освещена в документации Apple.Например, посмотрите Что происходит в разделе основной функции в этого раздела Руководства по основам какао .Процитируем часть, относящуюся к этому вопросу (уже объясненную Bavarious):

Основная функция почти во всех приложениях Cocoa чрезвычайно проста.В Mac OS X он состоит только из одного вызова функции.

#import <AppKit/AppKit.h>

int main(int argc, const char *argv[]) {
    return NSApplicationMain(argc, argv);
}

Функция NSApplicationMain создает объект приложения, устанавливает пул автоматического выпуска, загружает исходный пользовательский интерфейс из основного файла пера и запускает приложение, тем самым запрашивая у него начало обработки событий, полученных в главном цикле событий.

...