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

一.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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容