美文网首页
ios基础之一天一道笔试题(4)

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

作者: 66be37b2096c | 来源:发表于2019-01-29 14:29 被阅读5次

    请写出程序输出结果:

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

    相关文章

      网友评论

          本文标题:ios基础之一天一道笔试题(4)

          本文链接:https://www.haomeiwen.com/subject/ogtxsqtx.html