Что такое автозапуск?

Возможный дубликат:
Зачем использовать пул Autorelease?

Все стартовая страница Objective-C открывается по умолчанию @autoreleasepool{...} оператор под объявлением основной функции. Но что на самом деле делает это утверждение? Новый Objective-C автоматически освобождает объекты, и удаление строки ничего не меняет в программе. Эта команда действительно необходима?

1 ответ

@autoreleasepool оператор выполняет ту же работу, что и раньше, вместо использования класса NSAutoreleasePool. Работа NSAutoreleasePool была немного странной, поскольку ее создание вызывало эффект во всем приложении; @autoreleasepool создает область видимости и проясняет, что находится внутри пула и когда он сливается (когда выходит из области видимости). По словам Apple, это также более эффективно.

Концепция пула автоматического выпуска проста всякий раз, когда экземпляр объекта помечается как автоматически выпущенный (например, NSString* str = [[[NSString alloc] initWithString:@"hello"] autorelease];), он будет иметь счетчик сохранения +1 в этот момент времени, но в конце цикла выполнения пул будет очищен, и для любого объекта, помеченного как авто-релиз, его счетчик хранения будет уменьшен. Это способ сохранить объект, пока вы готовите то, что сохранит его для себя.

С ARC, в то время как autorelease Ключевое слово не используется разработчиком, базовая система, которая управляет ARC, вставляет его для вас. (Помните: все, что ARC делает, это вставляет retain, release а также autorelease звонки для вас в подходящее время). Из-за этого существующая концепция AutoreleasePool должна оставаться в стороне.

Если вы удалите пул автоматического выпуска, ваши объекты начнут протекать

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

Другие вопросы по тегам