美文网首页
objc_msgSendSuper 理解

objc_msgSendSuper 理解

作者: YM_1 | 来源:发表于2018-03-26 17:12 被阅读355次

刨根问底Objective-C Runtime

  super 调用 objc_msgSendSuper 告诉系统
去父类方法列表里面去找,但是调用者主体还是 self
和 self 的区别只是不在本类 的方法列表中查找

经常写的代码 如下

- (instancetype)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self) {
        count = 0;
        NSLog(@"%@",NSStringFromClass([self class]));
        NSLog(@"%@",NSStringFromClass([super class]));

    }
    return self;
}

super 的含义,消息转发会调用 objc_msgSendSuper, 就是 去父类的方法列表中找到 initWithFrame:这个方法,然后调用,调用的主体是 self。super 只是一个编译器的特殊字符,并不代表父类的一个实例化对象。这也就能明白为什么 调用 [super initWithFrame:frame]能得到本类的 实例化对象了,而不是父类的对象了。
[self class] [super class]class 这个方法都是 在 NSObject 对象中找到的,所以 都相当于 调用 [self class], 输入都是 一样的 SubView

相关文章

  • objc_msgSendSuper 理解

    刨根问底Objective-C Runtime 经常写的代码 如下 super 的含义,消息转发会调用 objc_...

  • Runtime:super原理分析

    目录一,objc_msgSendSuper二,方法和内存地址查找 一,objc_msgSendSuper 1,实例...

  • 对super关键字的小验证

    前言 你知道objc_msgSendSuper2(注意,不是objc_msgSendSuper)吗?如果不知道,这...

  • Objective-C super指针 superclass c

    super 从objc源码中,可以看到对 objc_msgSendSuper的定义, 传入的super参数结构是 ...

  • 二十八、Runtime之(十一)方法-objc_msgSendS

    一、objc_super的底层结构(并非super的真正结构) 二、objc_msgSendSuper的函数说明 ...

  • [super message]底层实现

    疑问:为什么有时调用[super class]会打印子类的类?此方法调用: objc_msgSendSuper(a...

  • 理解!理解!!理解!!!

    1、如何理解MVC设计模式 MVC是一种架构模式,M表示MOdel,V表示视图View,C表示控制器Control...

  • 理解“理解”

    教育不是灌输而是揭示 教育就是向智者揭示智慧,对愚者掩盖无知。——安布罗斯 比尔斯 我们的课堂教学要做的是设计表现...

  • 理解理解,再理解

    【今日悦读】 1214-潇潇 书名:财富自由之路 作者:李笑来 篇目:10~12节 收获: 1,人生三大坑 莫名其...

  • 理解不被理解

    一个人的坐在电脑前发呆,不知道搞什么,闭上眼睛,感觉自己很孤独。这种是内心的那种,很不是滋味,不知道什么时候自己才...

网友评论

      本文标题:objc_msgSendSuper 理解

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