为了缩短构建时间并尽可能保持代码简洁,我一直在头文件中使用前向声明并将#import语句放在实现文件中。到目前为止,这一直很好,但是我遇到了一个问题。假设我有一个MyClass返回 class 对象的类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.
最佳做法是什么?我的直觉是,如果我要返回一个类或将该类用作公共方法中的参数,则头文件应该包含在我的头文件中。否则,如果我有一个类在面向公众的方法中使用了十个不同的非基础类,我的用户每次想要使用该方法时都必须寻找并将新的头文件导入到他们的项目中。
这是正确的还是有更好的模式可以使用?