ios基础之一天一道笔试题(4)

请写出程序输出结果:

@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类

猜你喜欢

转载自blog.csdn.net/weixin_33913332/article/details/86974651