#importと@classの違い

Gustl007

私は最近、あなたが使用しても違いがないと話者が言ったチュートリアルを見ました:

#import "Class.h"

または:

@class Class;

そして、私は言わなければなりません、私のアプリはいずれかの方法で動作します。しかし、違いがなければなりませんよね?だから私はあなたたちに尋ねると思いました。

前もって感謝します!

ヴィニート・シン

「#import」は、問題のヘッダーファイル全体を現在のファイルに取り込みます。そのファイル#importsが含まれるすべてのファイルも含まれます。

一方@ classは(いくつかのクラス名を使用して単独で行で使用される場合)、コンパイラに「ねえ、すぐに新しいトークンが表示されます。これはクラスなので、そのように扱います)。

これは、「サーキュラーインクルード」の可能性がある場合に非常に便利ですつまり、Object1.hはObject2を参照し、Object2.hはObject1を参照します。あなたがいる場合#import both、他のファイルの中に、それはしようとすると、コンパイラが混乱することができ#import、Object1.hそれでルックスとObject2.hを見ています。#importObject2.h試行し、Object1.hなどを確認します。

一方、これらの各ファイルに@classObject1がある場合。または@classObject2;の場合、循環参照はありません。#import実装(.m)ファイルに実際に必要なヘッダーを必ず入れてください。

例えば

あなたが言うなら@class myClass、コンパイラはそれが次のようなものを見るかもしれないことを知っています:

myClass *myObject;

myClassが有効なクラスである以外は何も心配する必要はなく、それへのポインター(実際には単なるポインター)用のスペースを予約する必要があります。したがって、ヘッダーでは、@class90%の時間十分です。

ただし、myObjectのメンバーを作成またはアクセスする必要がある場合は、それらのメソッドが何であるかをコンパイラーに通知する必要があります。この時点で(おそらく実装ファイル内で)、#import "myClass.h"「これはクラスです」だけでなく、コンパイラに追加情報を伝える必要があります

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事