При использовании Autorelease, когда это на самом деле выпущено?
-
27-09-2019 - |
Вопрос
Иногда я задаюсь вопросом, когда что-то получает авторелирование. Я добавил NSLog в Dealloc различных объектов, но я не мог найти ничего полезного.
Когда используется что-то, когда используется ауторелез? Это непредсказуемо, или есть ли дополнительная поток? Спасибо.
Решение
Когда «Autorelease Pool истекает».
Что это обычно означает, когда стек расстегнут.
Так что думайте об этом таким образом - ваше приложение - это событие, управляемое событие. Вы получаете сообщения, отправленные ему - и они обрабатываются через серию функций. Когда каждая из функций возвращается, и событие выполняется обрабатываемым, будет вызываться AutoRelrease.
Это означает, что вы можете рассчитывать на объект, чтобы по-прежнему быть живым, когда вы автоматизируете его, и верните его из функции к абоненту. Никогда не ожидайте, что это будет вокруг при обработке любого вида последующего события или при вызове вне вас существующего кадра стека.
Другие советы
Каждый поток в приложении Cocoa поддерживает свой собственный стек объектов NSautorEleasePool. Когда нить завершается, она автоматически выпускает все бассейны авторелез, связанных с собой.