一.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的的關系可以用一副經典的圖來表示
圖片來源于網絡