Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека разработчика Mac

Разработчик

Ссылка платформы основы ссылка класса NSAutoreleasePool

Опции
Развертывание Target:

На этой странице

NSAutoreleasePool

NSAutoreleasePool класс используется для поддержки считаемой на ссылку системы управления памятью Какао. Пул автовыпуска хранит объекты, отправляющиеся a release обменивайтесь сообщениями, когда будет истощен сам пул.

В считаемой на ссылку среде (в противоположность той, использующей сборку «мусора»), NSAutoreleasePool объект содержит объекты, получившие autorelease обменивайтесь сообщениями и, когда истощено это отправляет a release обменивайтесь сообщениями к каждому из тех объектов. Таким образом, отправка autorelease вместо release к объекту расширяет время жизни того объекта, по крайней мере, пока сам пул не истощен (это может быть более длинно, если объект впоследствии сохраняется). Объект может несколько раз помещаться в тот же пул, когда это получает a release сообщение в течение каждого раза это было помещено в пул.

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

Набор Приложения создает пул автовыпуска на основном потоке в начале каждого цикла цикла событий и истощает его в конце, таким образом выпуская любые автовыпущенные объекты, сгенерированные при обработке события. При использовании Набора Приложения Вы поэтому обычно не должны создавать свои собственные пулы. Если Ваше приложение создает много временных автовыпущенных объектов в цикле событий, однако, это может быть выгодно для создания «локальных» пулов автовыпуска, чтобы помочь минимизировать пиковый объем потребляемой памяти.

Вы создаете NSAutoreleasePool объект с обычным alloc и init сообщения и избавляются от него с drain (или release— для понимания различия посмотрите Сборку «мусора»). Так как Вы не можете сохранить пул автовыпуска (или автовыпустить его — посмотрите retain и autorelease), дренаж пула в конечном счете имеет эффект освобождения его. Необходимо всегда истощать пул автовыпуска в том же контексте (вызов метода или функции или организации цикла), что это создавалось. Дополнительную информацию см. Используя Блоки Пула Автовыпуска.

Каждый поток (включая основной поток) поддерживает свой собственный штабель NSAutoreleasePool объекты (см. Потоки). Поскольку новые пулы создаются, они добавляются к вершине штабеля. Когда пулы освобождены, они удалены из штабеля. Автовыпущенные объекты помещаются в главный пул автовыпуска для текущего потока. Когда поток завершается, он автоматически истощает все пулы автовыпуска, связанные с собой.

Потоки

При совершении звонков Какао за пределами основного потока Набора Приложения — например, если Вы создаете приложение Только для основы или если Вы отсоединяете поток — необходимо создать собственный пул автовыпуска.

Если Ваше приложение или поток долгосрочны и потенциально генерируют много автовыпущенных объектов, необходимо периодически истощать и создавать пулы автовыпуска (как Набор Приложения, делает на основном потоке); иначе, автовыпущенные объекты накапливаются, и Ваш объем потребляемой памяти растет. Если, однако, Ваш отдельный поток не выполняет вызовы Какао, Вы не должны создавать пул автовыпуска.

Сборка «мусора»

В собравшей «мусор» среде нет никакой потребности в пулах автовыпуска. Можно, однако, записать платформу, разработанную для работы и в собравшей «мусор» и в считаемой на ссылку среде. В этом случае можно использовать пулы автовыпуска, чтобы подсказать коллектору, что набор может быть надлежащим. В собравшей «мусор» среде, отправляя a drain обменивайтесь сообщениями к триггерной сборке «мусора» пула если необходимый; release, однако, нет. В считаемой на ссылку среде, drain имеет тот же эффект как release. Как правило, поэтому необходимо использовать drain вместо release.

Наследование


Соответствует


Оператор импорта


Не применимый

Objective C

@import Foundation;

Доступность


Доступный в OS X v10.0 и позже.
  • Выпуски и популярность получатель.

    Объявление

    Objective C

    - (void)release

    Обсуждение

    В считаемой на ссылку среде, так как не может быть сохранен пул автовыпуска (см. retain), этот метод заставляет получатель быть освобожденным. Когда пул автовыпуска освобожден, он отправляет a release обменивайтесь сообщениями ко всем его автовыпущенным объектам. Если объект добавляется несколько раз к тому же пулу, когда пул освобожден, это получает a release сообщение в течение каждого раза это было добавлено.

    В собравшей «мусор» среде этот метод нет.

    Специальные замечания

    Необходимо обычно использовать drain вместо release.

    См. также

    – высушить

  • В считаемой на ссылку среде, выпусках и выталкивает получатель; в собравшей «мусор» среде триггерная сборка «мусора», если память выделила начиная с последнего набора, больше, чем текущий порог.

    Объявление

    Objective C

    - (void)drain

    Обсуждение

    В считаемой на ссылку среде этот метод ведет себя то же как release. Так как пул автовыпуска не может быть сохранен (см. retain), это поэтому заставляет получатель быть освобожденным. Когда пул автовыпуска освобожден, он отправляет a release обменивайтесь сообщениями ко всем его автовыпущенным объектам. Если объект добавляется несколько раз к тому же пулу, когда пул освобожден, это получает a release сообщение в течение каждого раза это было добавлено.

    Специальные замечания

    В собравшей «мусор» среде, release не, поэтому если Вы не хотите давать коллектору подсказку, важно использовать drain в любом коде, который может быть скомпилирован для собравшей «мусор» среды.

    Оператор импорта

    Objective C

    @import Foundation;

    Доступность

    Доступный в OS X v10.4 и позже.

  • Повышает исключение.

    Объявление

    Objective C

    - (id)autorelease

    Возвращаемое значение

    self.

    Обсуждение

    В считаемой на ссылку среде этот метод повышает исключение.

  • Повышает исключение.

    Объявление

    Objective C

    - (id)retain

    Возвращаемое значение

    self.

    Обсуждение

    В считаемой на ссылку среде этот метод повышает исключение.

  • Добавляет данный объект к активному пулу автовыпуска в текущем потоке.

    Объявление

    Objective C

    + (void)addObject:(id)object

    Параметры

    object

    Объект добавить к активному автовыпуску объединяет в текущем потоке.

    Обсуждение

    Тот же объект может добавляться несколько раз к активному пулу и, когда пул будет освобожден, это получит a release сообщение в течение каждого раза это было добавлено.

    Обычно Вы не вызываете этот метод непосредственно — Вы отправляете autorelease к object вместо этого.

    Оператор импорта

    Objective C

    @import Foundation;

    Доступность

    Доступный в OS X v10.0 и позже.

    См. также

    – addObject:

  • Добавляет данный объект к получателю

    Объявление

    Objective C

    - (void)addObject:(id)object

    Параметры

    object

    Объект добавить к получателю.

    Обсуждение

    Тот же объект может несколько раз добавляться к тому же пулу; когда пул будет освобожден, объект получит a release сообщение в течение каждого раза это было добавлено.

    Обычно Вы не вызываете этот метод непосредственно — Вы отправляете autorelease к object вместо этого.

    Оператор импорта

    Objective C

    @import Foundation;

    Доступность

    Доступный в OS X v10.0 и позже.

    См. также

    + addObject:

  • Выводит на экран состояние штабеля пула автовыпуска текущего потока к stderr.

    Объявление

    Objective C

    + (void)showPools

    Специальные замечания

    Оператор импорта

    Objective C

    @import Foundation;

    Доступность

    Доступный в OS X v10.0 и позже.