В Obj-C нет такого же понятия "внутренний".Как говорит Джошуа, лучшее, что вы можете сделать, это просто оставить заголовки для «внутренних» подклассов закрытыми, документируя только интерфейс для базового класса.
Ваш дизайн в порядке, если вы создаете абстрактный базовый класс.Этот дизайн используется Apple для «кластеров классов», когда вы не получаете, скажем, NSString
или NSImage
, вы получаете что-то еще с тем же интерфейсом.
Другой способ сделать это в Obj-C - использовать формальный протокол:
@protocol AbstractInterface
- (void)method1;
...
@end
Затем вместо обхода AbstractBaseClass *
с вы передаете id<AbstractInterface>
с.Если ваш базовый класс имеет нулевое состояние и не имеет реализаций по умолчанию, они эквивалентны.
Чтобы ответить на другой вопрос: у каждого класса должны быть свои файлы .h и .m.Это в значительной степени всегда верно независимо от этого конкретного контекста.