一.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];
当子类调用父类的实例方法的时候,子类的class类对象的superclass指针指向父类,直至基类(NSObject)找到方法并执行(注意,这里指的是实例方法,也就是减号方法)
三.元类对象的superclass 指针
当子类调用父类的类方法的时候,子类的superclass指向父类,并查找到相应的类方法,调用
[Student perEat];
-
总的来说,isa,superclass的的关系可以用一副经典的图来表示