一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

對(duì)象中的前8字節(jié)就是isa指針

 最初九月雪 2016-08-18
 查看文檔可知
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的地址。
  1. #import <Foundation/Foundation.h>

  2. //Person類聲明
  3. @interface Person : NSObject
  4. {
  5.     int _age;
  6. }

  7. - (void)setAge:(int)age;//設(shè)置_age
  8. - (int)age;//返回_age

  9. - (void*)getIsaAddr;//獲取isa成員變量的地址
  10. @end


  11. //Student類聲明
  12. @interface Student : Person
  13. {
  14.     int _score;//分?jǐn)?shù)
  15. }

  16. - (void)setScore:(int)score;//設(shè)置_score
  17. @end



  18. int main(int argc, const char * argv[])
  19. {
  20.    
  21.     Person *p = [Person new];
  22.     [p setAge:0x88888888];
  23.    
  24.     NSLog(@"p = %p", p);
  25.     NSLog(@"&(p->isa) = %p", [p getIsaAddr]);
  26.    
  27.    
  28.    
  29.     Student *stu = [Student new];
  30.     [stu setAge:0x77777777];
  31.     [stu setScore:0x66666666];
  32.    
  33.     NSLog(@"stu = %p", stu);
  34.     NSLog(@"&(stu->isa) = %p", [stu getIsaAddr]);
  35.    
  36.    
  37.    
  38.     return 0;
  39. }


  40. //Person類的實(shí)現(xiàn)
  41. @implementation Person

  42. - (void)setAge:(int)age
  43. {
  44.     _age = age;
  45. }

  46. - (int)age
  47. {
  48.     return _age;
  49. }

  50. - (void*)getIsaAddr
  51. {
  52.     //NSLog(@"size = %u", sizeof(isa));
  53.     return (void*)&isa;
  54. }
  55. @end


  56. //Student類的實(shí)現(xiàn)
  57. @implementation Student

  58. - (void)setScore:(int)score
  59. {
  60.     _score = score;
  61. }

  62. @end
復(fù)制代碼


通過(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;


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    麻豆精品视频一二三区| 国产免费一区二区不卡| 亚洲av秘片一区二区三区| 麻豆精品在线一区二区三区| 亚洲永久一区二区三区在线| 精品欧美日韩一二三区| 女生更色还是男生更色 | 日本黄色高清视频久久| 99热九九热这里只有精品| 中国一区二区三区不卡| 免费大片黄在线观看日本| 日韩三极片在线免费播放| 亚洲专区中文字幕视频| 五月综合婷婷在线伊人| 日韩成人h视频在线观看| 午夜福利网午夜福利网| 福利视频一区二区在线| 男人大臿蕉香蕉大视频| 日韩国产亚洲欧美另类| 日韩欧美一区二区久久婷婷| 欧美一区二区黑人在线| 午夜亚洲少妇福利诱惑| 久久精品中文字幕人妻中文| 可以在线看的欧美黄片| 色婷婷视频在线精品免费观看| 女人精品内射国产99| 不卡一区二区高清视频| 黄色片国产一区二区三区| 日韩一区二区三区在线日| 国产超碰在线观看免费| 亚洲五月婷婷中文字幕| 亚洲欧美日本国产不卡| 色婷婷激情五月天丁香| 日韩人妻一区中文字幕| 草草视频福利在线观看| 日本熟女中文字幕一区| 欧美激情床戏一区二区三| 邻居人妻人公侵犯人妻视频| 久热人妻中文字幕一区二区| 日本不卡在线视频你懂的| 观看日韩精品在线视频|