self 与 super

我们都知道:self 是类的隐藏参数,指向当前调用方法的这个类的实例。那 super 呢?

很多人会想当然的认为“ super 和 self 类似,应该是指向父类的指针吧!这是很普遍的一个误区。其实 super 是一个 Magic Keyword, 它本质是一个编译器标示符,和 self 是指向的同一个消息接受者!他们两个的不同点在于:super 会告诉编译器,调用 class 这个方法时,要去父类的方法,而不是本类里的。

举个栗子:
下面的代码输出什么?

@implementation Son : Father

 - (id)init {
    self = [super init]; 
    if (self) { 
      NSLog(@"%@", NSStringFromClass([self class]));       
      NSLog(@"%@", NSStringFromClass([super class])); 
    }
   return self;
} 

@end

答案:
都输出 Son

NSStringFromClass([self class]) = Son
NSStringFromClass([super class]) = Son

参考链接:微博@Chun_iOS的博文刨根问底Objective-C Runtime(1)- Self & Super

摘自这里,点击查看更多问题及答案

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容