请写出程序输出结果:
@implementation Son : Father
- (id)init {
self = [super init];
if (self) {
NSLog(@"%@", NSStringFromClass([self class]));
NSLog(@"%@", NSStringFromClass([super class]));
}
return self;
}
@end
结果: Son, Son
解析:此题主要考察对self和super的理解
首先看下objc_super这个结构体,下面会用到:
struct objc_super {
id receiver;
Class superClass;
};
该结构体拥有两个成员变量:receiver-->子类对象和superClass-->父类。
在本例中,super是一个编译器符号,当编译器遇到[super init]时会构 建 objc_super 的结构体,receiver则表示Son类中的实例对象,和self相同,superClass 表示Father ,[super init]即表示找到Father 中的init方法,用Son类的实例对象self调用此方法;self是当前类的一个实例对象,self和super指向的都是同一个对象,区别是查找方法的位置不同,self表示从当前类查找方法,super表示从父类中查找方法,所以输出[self class]和[super class]时都会是Son类
网友评论