ビルド時間を短縮し、コードをできるだけ簡潔に保つために、ヘッダー ファイルで前方宣言を使用#importし、実装ファイルにステートメントを配置しています。これはこれまでのところうまく機能していますが、問題が発生しました。MyClass次のようなclass のオブジェクトを返すクラスがあるとしますWidget。
@interface MyClass : NSObject
-(Widget*)widgetWithName:(NSString*)name;
@end
Widgetメソッドがあると仮定する-(void)arbitraryMethod;
ここで、 をインポートし、オブジェクトをMyClass.hインスタンス化し、 を実行し、返された にメッセージを送信しようとするクラスを実装しているとします。エラーが発生します。そのため、ヘッダー ファイルをインポートしてエラーを修正する必要があります。MyClasswidgetWithName:arbitraryMethodWidgetreceiver type "Widget" for instance message is a forward declarationWidget.h
もちろん、私がFoundationクラスを返すとき、これ#import <Foundation/Foundation.h>は決して問題ではありませんPrefix.pch.
ベストプラクティスは何ですか? 私の直感では、クラスを返す場合、またはそのクラスをパブリック メソッドの引数として使用する場合、ヘッダー ファイルをヘッダー ファイルに含める必要があります。そうしないと、公開メソッドで 10 個の異なる非基礎クラスを使用するクラスがあった場合、ユーザーはそのメソッドを使用するたびに、新しいヘッダー ファイルを探し出してプロジェクトにインポートする必要があります。
これは正しいですか、それとも使用するより良いパターンがありますか?