Чтобы сократить время сборки, а также сделать мой код как можно более кратким, я использовал предварительные объявления в своих файлах заголовков и помещал свои операторы #import
в файлы реализации. До сих пор это работало отлично, однако я столкнулся с проблемой. Предположим, у меня есть класс MyClass
, который возвращает объект класса Widget
, например:
@interface MyClass : NSObject
-(Widget*)widgetWithName:(NSString*)name;
@end
Предположим, что у Widget
есть метод -(void)arbitraryMethod;
Теперь предположим, что я реализую класс, который импортирует MyClass.h
, создает экземпляр объекта MyClass
, выполняет widgetWithName:
, а затем пытается отправить сообщение arbitraryMethod
возвращаемому Widget
, я получаю сообщение об ошибке receiver type "Widget" for instance message is a forward declaration
. Итак, я должен продолжить и импортировать заголовочный файл Widget.h
, чтобы исправить ошибку.
Конечно, это не проблема, когда я возвращаю классы Foundation
, потому что #import <Foundation/Foundation.h>
находится в Prefix.pch
.
Какова наилучшая практика? Я чувствую, что если я возвращаю класс или использую этот класс в качестве аргумента в общедоступном методе, файл заголовка должен быть включен в мой файл заголовка. В противном случае, если бы у меня был класс, использующий десять разных неосновных классов в публичных методах, моим пользователям пришлось бы выискивать и импортировать новый заголовочный файл в свой проект каждый раз, когда они хотели использовать этот метод.
Это правильно или есть лучший шаблон для использования?