Ответ 1
Оператор @autoreleasepool
выполняет ту же работу, что и раньше, вместо использования класса NSAutoreleasePool. Способ работы NSAutoreleasePool был немного странным, поскольку его создание вызвало эффект во всем приложении; @autoreleasepool
создает область с областью видимости и дает более четкое представление о том, что внутри пула и когда оно сливается (когда оно выходит за рамки). Это также более эффективно в соответствии с Apple.
Концепция пула авторезистов проста, всякий раз, когда экземпляр объекта помечен как автореализованный (например, NSString* str = [[[NSString alloc] initWithString:@"hello"] autorelease];
), он будет иметь значение удержания +1 в этот момент времени, но в конце прогона петля, пул сливается, и любой объект, отмеченный autorelease, затем имеет счет сохранения, уменьшенный. Это способ держать объект вокруг, пока вы готовите все, что сохранит его для себя.
С ARC, в то время как ключевое слово autorelease
не используется разработчиком, базовая система, которая управляет вставками ARC для вас. ( Помнить:. Все ARC выполняет вставку retain
, release
и autorelease
вызывает вас в соответствующие моменты времени). Из-за этого существующая концепция AutoreleasePool должна остаться.
Если вы удалите пул авторесурсов, ваши объекты начнут протекать
В среде с подсчетом ссылок Cocoa ожидает, что всегда будет доступен пул авторекламы. Если пул недоступен, автореализованные объекты не освобождаются и вы пропускаете память. В этой ситуации ваша программа, как правило, записывает соответствующие предупреждающие сообщения.