一.isa指針
-
上篇文章我們提到了實(shí)例對象,類對象和元類對象的存儲結(jié)構(gòu)里面都包含了一個isa指針,今天我們來看看它的作用,以及實(shí)例對象類對象元類對象之間的關(guān)聯(lián)

復(fù)習(xí)
-
實(shí)例對象的isa指針
- 當(dāng)實(shí)例對象(instance)調(diào)用對象方法的時候,實(shí)例對象的isa指針指向類對象(class),在類對象中,查找對象方法并調(diào)用
-
類對象的isa指針
-
類對象(class)的isa指針指向元類對象(meta-class),當(dāng)調(diào)用類方法時,類對象的isa指針指向元類對象,并在元類里面找到類方法并調(diào)用
指向關(guān)系
-
二.類對象的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{
}
- 當(dāng)實(shí)例對象調(diào)用自身的對象方法時,它在自身的class對象中找到StudentMethod方法
Student *student = [[Student alloc]init];
[student StudentMethod]
- 當(dāng)實(shí)例對象調(diào)用父類的方法的時候
Student *student = [[Student alloc]init];
[student perMethod];

superclass指向
當(dāng)子類調(diào)用父類的實(shí)例方法的時候,子類的class類對象的superclass指針指向父類,直至基類(NSObject)找到方法并執(zhí)行(注意,這里指的是實(shí)例方法,也就是減號方法)
三.元類對象的superclass 指針
當(dāng)子類調(diào)用父類的類方法的時候,子類的superclass指向父類,并查找到相應(yīng)的類方法,調(diào)用
[Student perEat];

元類對象的superclass指針指向
-
總的來說,isa,superclass的的關(guān)系可以用一副經(jīng)典的圖來表示
圖片來源于網(wǎng)絡(luò)

