OC中 Self 与 Super 的区别

2017-09-25  本文已影响153人  大王叫我来巡山_Cong

前奏

self 是什么? super 是什么?
  动态方法中:self 是代表 “对象”,
  静态方法中:self 是代表 “类”。
  self 就代表当前方法的调用者,
  super 相当于调用父类的方法。
这个例子我就不写了。

如果在 init 中调用 self 和 super 是否会有不同?

新建一个类叫 Son 继承 NSObject

- (id)init {
    if (self = [super init] ) {
        
        NSLog(@"%@", NSStringFromClass([self class])); // Son
        NSLog(@"%@", NSStringFromClass([super class])); // Son
        NSLog(@"%@", NSStringFromClass([self superclass])); // Son
    }
    return self;
}

结果如下

  2017-09-24 13:25:11.109332+0800 Demo[22406:879505] Son
  2017-09-24 13:25:11.109567+0800 Demo[22406:879505] Son
  2017-09-24 13:25:11.109681+0800 Demo[22406:879505] NSObject

为什么?

又做了一个实验:
- (id)init {
    if (self = [super init]) {
        [[super superclass] eat];
        [[self superclass] eat];
        [[super class] eat];
        [[self class] eat];
    }
    return self;
}

原理:

msgSend 方法

msgSendSuper 方法

大概机制就这样了。

总结:

有错误的理解欢迎指出。共同进步!

上一篇 下一篇

猜你喜欢

热点阅读