ビルド時間を短縮し、コードをできるだけ簡潔に保つために、ヘッダー ファイルで前方宣言を使用#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
.
ベストプラクティスは何ですか? 私の直感では、クラスを返す場合、またはそのクラスをパブリック メソッドの引数として使用する場合、ヘッダー ファイルをヘッダー ファイルに含める必要があります。そうしないと、公開メソッドで 10 個の異なる非基礎クラスを使用するクラスがあった場合、ユーザーはそのメソッドを使用するたびに、新しいヘッダー ファイルを探し出してプロジェクトにインポートする必要があります。
これは正しいですか、それとも使用するより良いパターンがありますか?