Пулы с автоматическим выпуском в приложениях appkit

Мне сложно понять, КОГДА именно автоматические пулы создаются и выпускаются в приложениях AppKit.

Например, если у меня есть класс ApplicationController, который переопределяет init, существует ли пул автозапуска, который создается до его запуска и осушается после его завершения?


person cfischer    schedule 28.10.2010    source источник


Ответы (1)


Основной поток в приложении AppKit запускает NSRunLoop для обработки событий. NSRunLoop создает новый пул автозапуска каждый раз, когда обрабатывает новое событие (или таймер), и опорожняет его, как только поток управления возвращается в NSRunLoop. Таким образом, по сути, каждый проход через цикл выполнения имеет новый пул автозапуска.

person Lily Ballard    schedule 28.10.2010
comment
Так когда же будут выпущены объекты, созданные в init? О :-) - person cfischer; 29.10.2010
comment
После того, как вы запустили цикл выполнения, если вы автоматически отпустите что-либо, оно будет выпущено, как только поток управления вернется в цикл выполнения. Единственное исключение - если вы автоматически выпускаете что-то внутри main() (которое находится за пределами цикла выполнения) или в другом потоке. - person Lily Ballard; 29.10.2010
comment
Фернандо: Они будут выпущены, когда выйдут на свободу. Объекты, которые вы добавляете в пул с автоматическим выпуском, освобождаются, когда пул истощается. Бассейн, который вы создаете, когда осушаете его; пул, созданный циклом выполнения, истощается, когда ... ну, об этом вам говорит ответ. - person Peter Hosey; 29.10.2010