iOS开发-关于Super的题目

下面的程序会输出什么?

@implementation Son : Father 
- (id)init 
{ 
self = [super init]; 
if (self) 
{ 
NSLog(@”%@”, NSStringFromClass([self class])); 
NSLog(@”%@”, NSStringFromClass([super class])); 
} 
return self; 
} 
@end

答案:两句输出语句均输出:Son

为什么?
简单来说,self和super都是指向当前实例的,不同的是,[self class]会在当前类的方法列表中去找class这个方法,[super class]会直接开始在当前类的父类中去找calss这个方法,两者在找不到的时候,都会继续向祖先类查询class方法,最终到NSObject类。
由于我们在Father和Son中都没有去重写class这个方法,最终自然都会去执行NSObject中的class方法,结果也自然应该是一样的。
至于为什么是Son,我们可以看看NSObject中class的实现:

-(Class)class 
{ 
return object_getClass(self); 
}

这就说的通了,返回的都是self的类型,self此处正好就是Son,因此结果就会输出Son

你可能感兴趣的:(iOS开发-关于Super的题目)