美文网首页
runtime之self super _cmd

runtime之self super _cmd

作者: 火柴盒环游记 | 来源:发表于2020-05-18 15:12 被阅读0次
  • _cmd
代表当前类方法的 selector
  • self
self是类的隐藏的参数,指向当前调用方法的这个类的实例
  • super

/// Specifies the superclass of an instance. 
struct objc_super {
    /// 指定类的实例
    __unsafe_unretained _Nonnull id receiver;

    /// Specifies the particular superclass of the instance to message. 
#if !defined(__cplusplus)  &&  !__OBJC2__
    /* For compatibility with old objc-runtime.h header */
    __unsafe_unretained _Nonnull Class class;
#else
    __unsafe_unretained _Nonnull Class super_class;
#endif
    /* super_class is the first class to search */
};

通过super调用方法,编译器会自动转成objc_msgSendSuper

objc_msgSendSuper(struct objc_super * _Nonnull super, SEL _Nonnull op, ...)
'super'只是一个“编译器指示符”,根据`super`结构体可知'super'和 'self' 
指向的是相同的消息接收者(receiver),不同的是查找方法的时候,`self`是从
当前类查找,'super'是从父类查找

例:不论是用 [self setName] 还是 [super setName],接收"setName"
这个消息的接收者都是 PersonMe* p 这个对象。不同的是,'super' 告诉编译器,
当调用 setName 的方法时,要去调用父类的方法,而不是本类里的。

相关文章

网友评论

      本文标题:runtime之self super _cmd

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