@classの方法を使用して、私は最近、いくつかの例を見てきましたiOS 4開発で@classは何をしますか?
#import "MyViewController.h"
appdelegate.hへの.hの通常の輸入を
@class MyViewController;
を行うのではなくやってのいずれかの違いがあります相違があるかどうか疑問に思った。
ありがとうございました。
@classの方法を使用して、私は最近、いくつかの例を見てきましたiOS 4開発で@classは何をしますか?
#import "MyViewController.h"
appdelegate.hへの.hの通常の輸入を
@class MyViewController;
を行うのではなくやってのいずれかの違いがあります相違があるかどうか疑問に思った。
ありがとうございました。
大きな違いがあります。
@class MyViewController;
オブジェクトの前方宣言はMyViewController
です。コンパイラにオブジェクト型について通知するだけで、ヘッダファイルを含める必要がないときに使用されます。
あなたがこのタイプのオブジェクトを作成し、その上のメソッドを呼び出す必要がしかし、あなたがする必要がある場合:
#import "MyViewController.h"
しかし、通常、これは.m
ファイルで行われます。
前方宣言の追加使用は、それを使用するオブジェクトと同じヘッダーファイルに@protocol
を定義する場合です。
@protocol MyProtocolDelegate; //forward declaration
@interface MyObject {
id<MyProtocolDelegate> delegate;
...
}
...
@end
@protocol MyProtocolDelegate
... //protocol definition
@end
上記の例では、コンパイラは、それがMyObject
オブジェクトをコンパイルする前に、@protocol MyProtocolDelegate
が有効であることを知っている必要があります。
プロトコル定義を上記のMyObject
の定義を単に動かすだけでも動作します。
@class
は、クラスを定義するヘッダファイルを#importする必要なく、シンボルがObjective-cクラス名であることを宣言することができます。
これは、クラスへのポインタまたはクラスのメソッドパラメータを宣言するために定義されたクラス名だけが必要な場合に使用します。この場合、メソッド、フィールド、またはプロパティにアクセスする必要はありません。クラス。
これは、コンパイル時間と#importのごくわずかな量を節約し、時には混乱している円形度の問題を回避するのに役立ちます。
[そして、rjstellingが指摘するように、あなたが宣言をインターリーブしているし、あなたが何かを「前方宣言」する必要がある場合は、それが便利な場合があります。]
偉大な、説明のおかげで。 – user868830
多分この似たような質問は役に立ちます:[http://stackoverflow.com/questions/322597/class-vs-import](http://stackoverflow.com/questions/322597/class-vs-import) –