1

次の 2 つのコード ステートメントを考慮してください。

id class1 = [[MyClass alloc]init]; //First 
MyClass * class2 = [[MyClass alloc]init]; //Second

class1タイプへclass2のポインタはid正しいですか?のヘッダー ファイルでobjcClass、構造体ポインターの typedef だけでなく、構造体ポインターのidtypedef でもあることがわかりました。*これらの型が構造体へのポインターとして宣言されているのに、コードの 2 番目のステートメントにa を含める必要があるのはなぜですか?

4

2 に答える 2

1

すでにidへのポインタがあるため:struct

typedef struct objc_object {
    Class isa;
} *id;

asMyClassはポインターではありません。

于 2013-10-26T17:19:54.493 に答える
0
  • idタイプです。任意のオブジェクトへのポインターを保持できます。
  • Classタイプです。任意のクラス オブジェクトへのポインターを保持できます。(クラス オブジェクトは、クラスを表すオブジェクトです。つまり、クラス ( +) メソッドを呼び出したときにメッセージを受け取るオブジェクトです。)
  • MyClass *タイプです。のインスタンスである任意のオブジェクトへのポインターを保持できます。MyClass

class1およびclass2オブジェクトへのポインタです。

クラスオブジェクトとクラスのインスタンスの間に大きな混乱があるようです。AMyClass *はインスタンスへのポインタMyClass、つまりクラスが であるオブジェクトですMyClass。これは、クラス自体を表すクラス オブジェクトとはまったく異なります。クラス オブジェクトは のインスタンスではありませMyClassん。クラス オブジェクトは、おそらく今考えるべきではない、より高度なトピックです。MyClassMyClass

于 2013-10-28T22:32:24.187 に答える