[解決済み] クラス vs. #インポート
質問
クラスAがクラスBのヘッダーを含む必要があり、クラスBがクラスAのヘッダーを含む必要がある場合、循環インクルージョンを避けるために、フォワードクラス宣言を使用する必要があると私は理解しています。また
#import
は、単純な
ifndef
インクルードが一度しか起こらないようにするためです。
私の質問はこうです。どのような場合に
#import
を使用し、どのような場合に
@class
? 時々、もし私が
@class
のような、よくあるコンパイラの警告が表示されるのですが。
warning: receiver 'FooController' is a forward class and corresponding @interface may not exist.
を削除した場合と比較して、この点をぜひとも理解したいと思います。
@class
を前方に宣言し
#import
を追加して、コンパイラが出す警告を消しました。
解決方法は?
この警告が表示された場合。
<ブロッククオート警告: レシーバ 'MyCoolClass' はフォワードクラスであり、対応する @interface が存在しない可能性があります。
が必要です。
#import
というファイルがありますが、これは実装ファイル(.m)で行い、その中で
@class
をヘッダーファイルで宣言してください。
@class
は、(通常)必要なくなりません。
#import
ファイルを作成することで、必要な情報をより有用な場所に移動させることができます。
例
もし、あなたが
@class MyCoolClass
のようなものを見る可能性があることをコンパイラは知っています。
MyCoolClass *myObject;
以外を気にする必要はない。
MyCoolClass
は有効なクラスであり、それへのポインタのためのスペースを確保する必要があります (実際には単なるポインタです)。したがって、あなたのヘッダで
@class
90%はこれで十分です。
しかし、もしあなたが
myObject
のメンバは、それらのメソッドが何であるかをコンパイラに知らせる必要があります。この時点で(おそらく実装ファイルの中で)、以下のようにする必要があります。
#import "MyCoolClass.h"
というように、コンパイラに単なるクラス名以上の情報を伝える必要があります。
関連
-
[解決済み】Xcode - 'NSUnknownKeyException', reason: ... this class is not key value coding-compliant for the key X" エラーの修正方法とは?
-
[解決済み] MPProgressHUDとNSSessionを使用したデータシンクの読み込み
-
[解決済み] C言語:拡張子「.mm」は何の略ですか?
-
[解決済み] Objective-CでNSNumberをintに変換する。
-
[解決済み] objcの "pi "と "M_PI "の違いは何ですか?
-
[解決済み] Objective-Cで乱数を発生させる
-
[解決済み] クラス vs. #インポート
-
[解決済み] NSDictionary または NSMutableDictionary にキーが含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み】タイトル変更時に不要なUIButtonのアニメーションを停止させる方法は?
-
[解決済み】Windows版Objective-C
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] UILabelのフォントサイズ?
-
[解決済み] Objective-CでNSStringsを連結するためのショートカット集
-
[解決済み] arc4randomとarc4random_uniformの違いは何ですか?重複
-
[解決済み] FBLoginVIewをカスタマイズするには?
-
非静的宣言に続く "****"の静的宣言
-
[解決済み] Objective-Cで乱数を発生させる
-
[解決済み] 開発者の身元が確認できないため開けない
-
[解決済み] newの代わりにalloc initを使用する
-
[解決済み】キーボードを簡単に解除する方法は?
-
[解決済み】Cocoaでスタックトレースをコンソール/ログに出力するにはどうすればいいですか?