Структура моего проекта
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
библиотека так, предложение должно учитывать и эту библиотеку.
Любая помощь или направления будут оценены.
Вы можете использовать препроцессор для изменения вашего заголовочного файла, используя технику из этот ответ
#if __has_feature(objc_arc)
//ARC-specific things
#else
//Non-ARC specific things
#endif
Если вам нужна функция Boost в некоторых классах, вы можете скрыть это с помощью Objective-C ++. Вспомогательные ссылки:
http://philjordan.eu/article/strategies-for-using-c++-in-objective-c-projects