Как узнать, включена ли в программе ARC или нет?
Я создаю проект с поддержкой ARC, используя мастер проекта Xcode. По сравнению с программой без поддержки ARC я не заметил никаких различий. Есть ли подсказка, которая может сказать мне, поддерживает ли моя программа ARC?
Я использую XCode 4.2.1 Build 4D502
Ответы
Ответ 1
Вы можете использовать __has_feature
, возможно, зарегистрировать, имеет ли проект ARC в консоли:
#if __has_feature(objc_arc)
// ARC is On
NSLog(@"ARC on");
#else
// ARC is Off
NSLog(@"ARC off");
#endif
В качестве альтернативы вместо того, чтобы просто регистрировать, включен ли ARC, попробуйте сделать компилятор с ошибкой, если ARC включен (или выключен) следующим образом:
#if ! __has_feature(objc_arc)
#error This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
#endif
Ответ 2
Если вы просто хотите узнать один раз, если у вашего проекта есть ARC, я предлагаю использовать ответ jpalten. Если вы хотите, чтобы ваш код работал только с ARC, я предлагаю qegal's.
Однако, если вы хотите узнать, где находится Xcode, это значение:
- Выберите свой проект в навигаторе. Это откроет редактор проекта.
- В редакторе проекта выберите свою цель.
- В редакторе проекта нажмите "Параметры сборки" (если он еще не выбран).
- В редакторе проекта щелкните поле поиска и введите
OBJC_ARC
.
Это приведет к тому, что в настройках сборки будет отображаться одна строка: Objective-C Автоматический подсчет ссылок или CLANG_ENABLE_OBJC_ARC (в зависимости от того, показываете ли вы настройки описаний или имен), Если он установлен на YES, у вас включен ARC.
Это ваш целевой выбор того, используется ли ARC. Обратите внимание, что каждый файл может быть скомпилирован с другим параметром. Это не то, что вы просили, но поскольку у нас уже есть три ответа, я думал, что убью возможный четвертый.:)
Чтобы узнать, какие файлы переопределяют параметр ARC:
- Выберите свой проект в навигаторе. Это откроет редактор проекта.
- В редакторе проекта выберите свою цель.
- В редакторе проекта нажмите Сформировать фазы (не создавать настройки).
- Разверните фазу Скомпилировать источники.
Здесь вы можете увидеть флаги компилятора для каждого файла. Файлы с этим набором, независимо от того, использовать или не использовать ARC, будут содержать либо -fno-objc-arc, либо -fobjc-arc, для указания MRR или ARC соответственно.
Ответ 3
Или проверить только один раз, добавьте это в свой код:
NSString* dummy = [[[NSString alloc] init] autorelease];
Это должно привести к ошибке, если вы используете ARC. Если это так, ARC включен, все в порядке, и вы можете удалить его снова.
Ответ 4
добавить "-fno-objc-arc" флаги компилятора для всех файлов .m в фазах сборки