美文网首页
iOS 实例对象,类对象,元类对象的关联---isa/super

iOS 实例对象,类对象,元类对象的关联---isa/super

作者: 枫紫_6174 | 来源:发表于2020-09-23 16:25 被阅读0次

    一.isa指针

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

    复习
    • 实例对象的isa指针

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

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


        指向关系

    二.类对象的superclass 指针

    • 先两个类,一个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];
    
    superclass指向

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

    三.元类对象的superclass 指针

    当子类调用父类的类方法的时候,子类的superclass指向父类,并查找到相应的类方法,调用

    [Student perEat];
    
    元类对象的superclass指针指向
    • 总的来说,isa,superclass的的关系可以用一副经典的图来表示


      图片来源于网络

    instance的isa指向class

    class的isa指向meta-class

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

    class的superclass指向父类的class

    相关文章

      网友评论

          本文标题:iOS 实例对象,类对象,元类对象的关联---isa/super

          本文链接:https://www.haomeiwen.com/subject/qjkoyktx.html