查看文檔可知 Discussion The isa instance variable of the new instance is initialized to a data structure that describes the class; memory for all other instance variables is set to 0. isa實(shí)例變量指向一個(gè)描述類的結(jié)構(gòu)體數(shù)據(jù)。而所有其它實(shí)例變量都會(huì)被設(shè)置為0值。 上一次看內(nèi)存知道對(duì)象指針加8才是自己聲明的實(shí)例變量的地址。前8個(gè)字節(jié)一直沒(méi)有搞清楚是什么。多謝論壇中fantacyleo的指點(diǎn)。其實(shí)對(duì)象開始8字節(jié)就是isa指針。那么他到底是不是呢,我做了一個(gè)簡(jiǎn)單的小程序,輸出isa的地址。
通過(guò)觀察isa起始地址和對(duì)象的起始地址值是一樣的,而isa在NSObject中被聲明為一個(gè)指針,MAC OS系統(tǒng)是64位的,所以指針也就是64的。即占8字節(jié)空間。 所以由此可以判斷對(duì)象的前8個(gè)字節(jié)就是isa指針。 isa在NSObject.h中聲明: @interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILITY; } 而Class在objc.h中又被聲明為: /// An opaque type that represents an Objective-C class. typedef struct objc_class *Class; 所以isa是就指向 objc_class結(jié)構(gòu)體的指針。 而后4字節(jié)就是person類實(shí)例變量age所占用的內(nèi)存空間; 再觀察person類的子類Student對(duì)象中實(shí)例變量在內(nèi)存中是怎么分布的 觀察發(fā)現(xiàn)同樣前8字節(jié)是isa指針,緊隨其后依次存放的是實(shí)例變量age和score; |
|
來(lái)自: 最初九月雪 > 《運(yùn)行時(shí)編程》