2012-09-16 2 views
3

Я читаю книгу, в которой говорится (если я не ошибаюсь), обертывание какого-либо кода с помощью инструкции @autoreleasepool позволяет ARC. В первую очередь это так?Objective C @autoreleasepool директива

Моей второй проблемой является то, что я делаю некоторые примеры приложений iOS, хотя я включаю ARC при создании нового проекта, я никогда не вижу, чтобы эта директива использовалась где угодно (в автоматически сгенерированном коде). Означает ли это, что ARC не используется? Любые идеи/указатели приветствуются.

ответ

4

@autoreleasepool не позволяет включить ARC. Это просто способ ARC использовать пулы автозапуска.

Перед ARC, вы использовали NSAutoreleasePool класс создать autorelease бассейн, как это:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
// Code benefitting from a local autorelease pool. 
[pool release]; 

Но вы не разрешили позвонить release при использовании ARC, поэтому вместо того, чтобы новый способ использовать autorelease бассейны был введен:

@autoreleasepool { 
    // Code benefitting from a local autorelease pool. 
} 

@autoreleasepool блоки являются более эффективными, чем при использовании экземпляра NSAutoreleasePool напрямую; вы также можете использовать их, даже если вы не используете ARC.

2

оборачивать код с @autoreleasepool заявление позволяет ARC

No. ARC включена с помощью флага компилятора. @autoreleasepool - это просто ключевое слово, используемое для создания пулов автоопределения, даже если вы используете ARC (потому что обычно вы должны создавать и уничтожать их с помощью alloc-init и release соответственно, но вы не можете отправлять явные сообщения release под ARC - вот почему ключевое слово было введено.)

И если вы включите ARC в Xcode/с компилятором/etc, он включен. Конечно, есть лучшие решения, чем принцип «autorelease all», и это может быть причиной того, что вы не сталкиваетесь с этим ключевым словом в примере кода.

4

Во-первых, книга неверна. @autoreleasepool ортогонален ARC. Вы можете использовать autoreleasepool без ARC, и вы можете использовать ARC без autoreleasepools (но вы не должны).

Во-вторых, основной поток проекта, созданного с использованием любого из проектов по умолчанию Xcode, будет создан для вас пул autoreleasepool. Любой поток, который вы создаете, должен будет создать собственный пул авторесурсов.

2

Мое второе беспокойство - когда я делаю некоторые примеры приложений iOS, хотя я включаю ARC при создании нового проекта, я никогда не вижу, чтобы эта директива использовалась где угодно (в автоматически сгенерированном коде). Означает ли это, что ARC не используется? Любые идеи/указатели приветствуются.

Вы используете это использование. Ознакомьтесь с файлом main.m в вашем проекте. Вы найдете его там.

Смежные вопросы