Как требовать ARC в классе? - PullRequest
9 голосов
/ 05 декабря 2011

У меня есть приложение с кодом ARC и кодом без ARC. Компилятор будет ловить, когда я пытаюсь скомпилировать не-ARC-код как ARC. Как вызвать ошибку / уведомление о времени компиляции, когда мой код ARC ошибочно скомпилирован без ARC? Очевидно, код скомпилируется. Это будет просто утечка. Статический анализатор поймает проблему. Я предпочел бы найти способ оставить прагму или определить в моем коде ARC.

Apple определяет следующее в objc-api.h:

/* OBJC_ARC_UNAVAILABLE: unavailable with -fobjc-arc */
#if !defined(OBJC_ARC_UNAVAILABLE)
#   if __has_feature(objc_arr)
#       define OBJC_ARC_UNAVAILABLE __attribute__((unavailable("not available in automatic reference counting mode")))
#   else
#       define OBJC_ARC_UNAVAILABLE
#   endif
#endif

Мой C-macro-fu слабый. Как бы я использовал это? Или, может быть, есть лучший символ для проверки?

P.S. Я спрашиваю, потому что я строю большую часть своего приложения из многоразовых библиотек Я хочу убедиться, что каждый файл скомпилирован правильно.

Ответы [ 2 ]

10 голосов
/ 05 декабря 2011

Должно работать следующее:

#if !__has_feature(objc_arc)
#  error Compile me with ARC, please!
#endif

Поместите его в начало файла.

0 голосов
/ 17 февраля 2012

Если это полный файл, я бы рекомендовал добавить -fno-objc-arc к флагам компилятора, чтобы использовать компилятор без дуг.

Используйте макрос для компиляции «частей» кода с помощьюне дуговой компилятор.например, используйте это, если вы пишете каркас, который будет использоваться как в дуговых, так и не дуговых кодах, а также в выпуске для записи, освобождаются в этом макроблоке

...