Во-первых, компилятор Objective-C (gcc или clang) хорошо справляется с тем, что не загромождает скомпилированный исходный код дублирующейся информацией заголовка. Нет ничего плохого в том, чтобы включить оба заголовка, если только заголовки не переопределяют один и тот же класс (что, как я подозреваю, имеет место здесь).
Замените #import "ClassSomething.h"
во всех ваших файлах на #import CLASS_SOMETHING_HEADER
Затем в вашем файле .pch
есть следующее:
#ifdef SomethingIsDefined
#define CLASS_SOMETHING_HEADER "ClassSomethingCustom.h"
#else
#define CLASS_SOMETHING_HEADER "ClassSomething.h"
#endif
Однако на самом деле это не идеально, так как макросы препроцессора, имеющие дело с импортом, могут привести ко многим непредвиденным ошибкам. Это не распространенный шаблон, и будущие разработчики могут не понять, что вы сделали.
Другой вариант, который вы, возможно, захотите рассмотреть, — это шаблон, который обычно используется в библиотеках, поддерживающих как iOS, так и OS X.
#ifdef SOME_IOS_IDENTIFIER_I_FORGOT_TO_LOOK_UP
typedef UIColor MyColor
#else
typedef NSColor MyColor
#endif
В этом случае вы должны назвать два класса по-разному и использовать псевдоним для ссылки на них в исходном коде. Поместите соответствующий импорт в «родительский» заголовочный файл, например «MyProjectImports.h» или что-то в этом роде. (где вы бы импортировали AppKit
или UIKit
)
В качестве альтернативы вы можете рассмотреть возможность использования Category
на ClassSomething
(т. е. «ClassSomething+Custom.h»), чтобы включить необходимые вам пользовательские функции. Это, вероятно, потребует некоторой переработки логики, лежащей в основе двух разных классов, но в файлах, которым требуется только пользовательское поведение, можно условно #import
заголовок категории, а другие файлы можно оставить в покое.
Без дополнительных сведений о том, чем эти два класса отличаются или будут использоваться, я не смогу вам помочь.
HtH
person
Stephen Furlani
schedule
08.12.2014