很多人会想当然的认为“ super 和 self 类似,应该是指向父类的指针吧!”。这是很普遍的一个误区。其实 super 是一个 Magic Keyword, 它本质是一个编译器标示符,和 self 是指向的同一个消息接受者!他们两个的不同点在于:super 会告诉编译器,调用 class 这个方法时,要去父类的方法,而不是本类里的。
当使用 self 调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找;而当使用 super 时,则从父类的方法列表中开始找。然后调用父类的这个方法。
看到有人说点语法的坏处,建议在构造方法中使用 _iVar,不使用 self.iVar,理由如下:
点语法( self.iVar )的坏处就是子类有可能覆写 setter,如果父类构造方法中使用了点语法给实例变量赋值,
而子类又重写了那个setter,那么在调用父类的构造方法时,调用的就会是子类的setter,而不是父类的。
#pragma mark: 对于上述理由,没看懂,所以我个人觉得 在构造方法中使用点语法没什么坏处,既然子类覆写了 setter,
那就肯定是希望调用子类覆写后的方法。