isa指针指向哪里

1. isa指针指向哪里     super_class指针指向哪里

   实例对象的isa指针指向类对象,类对象的isa指针指向元类对象,元类对象的isa指针指向基类

   类的 super_class指针指向他的父类,父类指向父类.......,   最后指向基类,基类指向nil

   元类的   super_class指针指向他的父类(元类),父类(元类)指向父类(元类).......,   最后指向基类(元类),基类(元类)指向他的(类的)基类 ,(类)基类指向nil

 

  1.2   先了解下 实例对象、类对象、元类对象 

       通过alloc创建实力对象

       NSObject *object1 = [[NSObject alloc] init];

       同过class创建类对象

       Class cs = [NSObject Class]; 或是  Class cs =  [object1 Class];

       通过object_getClass()创建元类对象

       Class metaCs = object_getClass(cs); 

  1.3   元类对象和类对象在内存中有且只有1份   看下面代码

      

   

     1.4.     实例对象、类对象、元类对象都有isa指针

    

     1.5.    看代码证明isa指向哪里

          1.5.1   实例对象isa指针指向类对象           在64位之后   实例对象isa&ISA_MASK之后才能得到的地址

      

      1.5.2   类的isa指针指向元类对象      在64位之后   对象isa&ISA_MASK之后才能得到元类的地址

    

    为什么会报错? 因为class是一个结构体 ,结构体内存储的有isa指针  ,但是不能被外部调用,   看下面代码

    

    接下来我们就写一个一摸一样的Class结构体,来证明类对象的isa指针指向元类对象  看代码

     

二    super_class指针指向哪里

       1    类的 super_class指针指向他的父类,父类指向父类.......,   最后指向基类,基类指向nil

 

        

       基类指向nil   看代码证明

        

三    元类  

         元类的    super_class指针指向他的父类(元类),父类(元类)指向父类(元类).......,   最后指向基类(元类),基类(元类)指向他的(类的)基类 ,(类)基类指向nil

         看下面代码证明

         

 

 

         

在网上找的大神的图公大家参考:

 

posted @ 2020-05-26 14:44  可可锋  阅读(488)  评论(0编辑  收藏  举报