美文网首页
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 理解

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