IOS Super的理解

来源:互联网 发布:ubuntu安装qq2017 编辑:程序博客网 时间:2024/06/03 19:32

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。