Подтвердить что ты не робот

Что такое autoreleasepool?

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

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

4b9b3361

Ответ 1

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

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

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

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

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