super和self

     

         很多人会想当然的认为super self 类似,应该是指向父类的指针吧!。这是很普遍的一个误区。其实 super 是一个 Magic Keyword 它本质是一个编译器标示符,和 self 是指向的同一个消息接受者!他们两个的不同点在于:super 会告诉编译器,调用 class 这个方法时,要去父类的方法,而不是本类里的。

     

     当使用 self 调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找;而当使用 super 时,则从父类的方法列表中开始找。然后调用父类的这个方法。

 


     看到有人说点语法的坏处,建议在构造方法中使用 _iVar,不使用 self.iVar,理由如下:

     点语法( self.iVar )的坏处就是子类有可能覆写 setter,如果父类构造方法中使用了点语法给实例变量赋值,

     而子类又重写了那个setter,那么在调用父类的构造方法时,调用的就会是子类的setter,而不是父类的。     

     #pragma mark: 对于上述理由,没看懂,所以我个人觉得 在构造方法中使用点语法没什么坏处,既然子类覆写了 setter,

            那就肯定是希望调用子类覆写后的方法。


        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值