注册

iOS 实例对象,类对象,元类对象的关联---isa/superclass指针(二)

  • 一.isa指针
  • 上篇文章我们提到了实例对象,类对象和元类对象的存储结构里面都包含了一个isa指针,今天我们来看看它的作用,以及实例对象类对象元类对象之间的关联

  • webp
  • 实例对象的isa指针


    • 当实例对象(instance)调用对象方法的时候,实例对象的isa指针指向类对象(class),在类对象中,查找对象方法并调用



  • 类对象的isa指针


    • 类对象(class)的isa指针指向元类对象(meta-class),当调用类方法时,类对象的isa指针指向元类对象,并在元类里面找到类方法并调用webp

      二.类对象的supercl

      • 先两个类,一个Person继承自NSObject,一个类继承自Person
      /// Person继承自NSObject
      @interface Person : NSObject
      -(void)perMethod;
      +(void)perEat;
      @end
      @implementation Person
      -(void)perMethod{
      }
      +(void)perEat{
      }

      @end

      /// student继承自Person
      @interface Student : Person
      -(void)StudentMethod;
      +(void)StudentEat;
      @end
      @implementation Student

      -(void)StudentMethod{
      }
      +(void)StudentEat{
      }



      • 当实例对象调用自身的对象方法时,它在自身的class对象中找到StudentMethod方法
      •         Student *student = [[Student alloc]init];
        [student StudentMethod]



        • 当实例对象调用父类的方法的时候

                Student *student = [[Student alloc]init];
        [student perMethod];当子类调用父类的实例方法的时候,子类的class类对象的superclass指针指向父类,直至基类(NSObject)找到方法并执行(注意,这里指的是实例方法,也就是减号方法)

        三.元类对象的superclass 指针
        当子类调用父类的类方法的时候,子类的superclass指向父类,并查找到相应的类方法,调用

      • [Student perEat];
      • webp

      • 总的来说,isa,superclass的的关系可以用一副经典的图来表示

        b2ac30643c328ad5c3b7b1079482ef1a.png

      • instance的isa指向class

        class的isa指向meta-class

        meta-class的isa指向基类的meta-class

        class的superclass指向父类的class



      • 作者:枫紫_6174
        原贴链接:https://www.jianshu.com/p/26f37fb21151

0 个评论

要回复文章请先登录注册