OC中的super与superclass

作者: 苹果API搬运工 | 来源:发表于2016-03-27 16:21 被阅读553次

    一般解释如下

    // class: 获取方法调用者类
    
    // superclass: 获取方法调用者 父类
    
    // super:super不是一个指针,super只是编译指示器
    
    // super: 仅仅是让方法调用者去调用父类方法
    

    这段解释看起来很简单,但是实际中很容易用错,尤其容易混淆的是super的用法.

    super实际上是让某个类自己去调用父类的方法,而不是父类去调用某方法;

    比如

    在名为Person的类.m中

    
    - (void)test{
    
    NSLog(@"%@ %@ %@ %@",[self class], [self superclass], [super class], [super superclass]);
    
    }
    
    

    在外面调用

    Person *person =[ [Person alloc] init];
    [person test];
    

    结果会是

    Person NSObject Person NSObject
    

    原理如下:

    • [self class]表示person对象调用class方法得到类名Person,

    • [self superclass]意味着person对象调用superclass方法,得到父类类名NSObject,

    • [super class]表示person对象去调用父类的class方法,因为是对象方法,person对象得到类名Person,

    • [super superclass]表示person对象去调用父类的superclass方法,得到person对象的父类类名NSObject,

    相关文章

      网友评论

      • IIronMan:欢迎继续投稿,让我们一起成长 :blush:

      本文标题: OC中的super与superclass

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