iOS 对象的关联---isa/superclass指针
类对象和元类对象的存储结构里面都包含了一个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];
当子类调用父类的实例方法的时候,子类的class类对象的superclass指针指向父类,直至基类(NSObject)找到方法并执行(注意,这里指的是实例方法,也就是减号方法)
三.元类对象的superclass 指针
当子类调用父类的类方法的时候,子类的superclass指向父类,并查找到相应的类方法,调用
[Student perEat];
总的来说,isa,superclass的的关系可以用一副经典的图来表示
instance的isa指向class
class的isa指向meta-class
meta-class的isa指向基类的meta-class
class的superclass指向父类的class
作者:枫紫_6174
链接:https://www.jianshu.com/p/ffb021a4b97c