私は長い間質問を考えています。誰かが私を助けることができれば、私はとても幸せになるでしょう。 すべてのインスタンスオブジェクトは、isaポインタを持つ構造体です。なぜ2つの異なるインスタンスのisaポインタが同じですか?
foo1->isa--0x10ed00df0
foo2->isa--0x10ed00df0
:その後、
Foo *foo1 = [[Foo alloc] init];
foo1.name = @"foo1";
Foo *foo2 = [[Foo alloc] init];
foo2.name = @"foo2";
NSLog(@"foo1->isa--%p", [foo1 class]);
NSLog(@"foo2->isa--%p", [foo2 class]);
結果
@interface Foo : NSObject
@property(nonatomic, strong) NSString *name;
@end
:事実はcontrary.For例にあるisa.But
typedef struct objc_object {
Class isa;
} *id;
ので、異なるインスタンスは異なる必要があります
2つのisaは同じです!なぜ彼らは同じですか?しかし、foo1はfoo2とは異なります! foo1.nameとfoo2.nameはどこに格納されていますか?キーだテーブルに格納されfoo1のとfoo2はの性質は「foo1の」または「foo2は」と値がプロパティリストされているではあり
これらは同じクラスのものです。 'foo1'は' 'Foo'であり、' foo2'もそうです。 '0x10ed00df0'は' Foo'クラスを指します。 – TylerTheCompiler
私はそれを知っているので、foo1とfoo2のすべてのプロパティは同じisaに格納されていますか? – Park
@Park 'isa'ポインタはオブジェクトがどのクラスであるかを示すオブジェクト構造体の先頭のポインタです。クラスの特定のメンバはメモリ内の 'isa'ポインタの後に来ます。実際、' id'は構造体のフルサイズを取得しません。それは単にオブジェクトの先頭を指しています(Cの配列への配列の崩壊と同様に、Cの配列ポインタはメモリ内の配列の先頭を指しています)。 –