0

isaクラスとそのスーパークラスにそのメソッドが実際に存在するかどうかを確認するために、ポインターがメッセージ内のインスタンス メソッドを検索することを読みました。だから私の質問は、オブジェクトのどこに実装されているのですか?

4

2 に答える 2

1

isaオブジェクトクラスを取得するためにポインターに直接アクセスするのではなく、代わりに使用する必要があることに注意してくださいobjc_getClass()。たとえば、ARM64 では、isaフィールドには、クラス ポインタに加えて、他のフラグ (オブジェクトの参照カウントが十分に小さい場合は最も顕著な値) が含まれます。詳細については、Mike Ash によるこの投稿を参照してください。

于 2013-10-11T09:54:03.643 に答える
0

クラスのランタイムを見ると、これに出くわします...

typedef struct objc_class *Class;
typedef struct objc_object {
    Class isa;
} *id; 

編集:

また、NSObject.h

/***********    Base class      ***********/

NS_ROOT_CLASS
@interface NSObject <NSObject> {
    Class   isa;
}
于 2013-10-11T09:49:12.033 に答える