Как обрабатывать не-ARC-код в заголовочном файле?

Структура моего проекта

MainProject (ARC)
Подпроекта (Non-ARC)
Библиотека повышения (т. Е. Популярная библиотека C ++ здесь - ссылка http://www.boost.org/)

Проблема:
Один из заголовочного файла (intrusive_ptr.h) библиотеки Boost имеет встроенную функцию с оператором «retain» (этот файл кем-то отредактирован, и он нормально работает в «SubProject (Non-ARC)»). Этот файл заголовка является общедоступным, многие файлы подпроектов импортируются в «MainProject», и этот файл имеет ссылку на этот файл заголовка. Таким образом, косвенно этот файл входит в MainProject, основанный на ARC. Вот почему компилятор отказывается компилировать.

Что я знаю или пробовал:
Я знаю, как установить флаг не ARC, но что мы можем установить только для .m файл (только для компилируемого файла) не включен .h файл. если кто-то может помочь мне или предложить мне какое-либо нестандартное решение.

Для тех, кто заинтересован в "intrusive_ptr.h" можно найти здесь intrusive_ptr.h. Этот файл является частью boost библиотека так, предложение должно учитывать и эту библиотеку.

Любая помощь или направления будут оценены.

1

Решение

Вы можете использовать препроцессор для изменения вашего заголовочного файла, используя технику из этот ответ

#if __has_feature(objc_arc)
//ARC-specific things
#else
//Non-ARC specific things
#endif
1

Другие решения

Если вам нужна функция Boost в некоторых классах, вы можете скрыть это с помощью Objective-C ++. Вспомогательные ссылки:
http://philjordan.eu/article/strategies-for-using-c++-in-objective-c-projects

http://support.apple.com/kb/TA45902?viewlocale=en_US

1