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