美文网首页
直接访问实例变量的init方法

直接访问实例变量的init方法

作者: Stroman | 来源:发表于2017-09-16 08:49 被阅读0次

    setter可能产生副作用。
    因为setter是与KVC编程相关的,所以在使用setter的时候可能会在无意中触发KVC,从而导致非预期的效果。
    但是在初始化对象的时候,你只是想初始化,而不想要KVC。
    当你初始化某对象并对其属性设值的时候,但是如果断点,你就会发现属性已经被设置了,但是init还没有被调用,所以此时对象中的实例变量还没有被初始化,所以此时的对象是不完整的。
    所以为了防止这种后果的出现,你需要在init中对实例变量而不是通过setter进行初始化。

    子类如此,那么父类也应该如此。这就是为啥子类对象在初始化的时候首先要调用父类的初始化方法。
    这要从两方面来讲:
    1、从继承层次的角度讲,子类的在初始化的时候如果不调用父类的init,就会导致子类中缺少了父类的成分,那就不符合IS-A原则了。从理论上来讲子类对象实例就不能调用父类的任何属性和方法,从实际效果来讲,编译器会报错提醒你没有调用父类的init方法。当然如果你不写初始化方法,编译器会自动完成这一步。
    2、子类用init来初始化自己的实例变量,父类也必须如此,这样二者都能避免文章开头说的问题。这样连锁反应就会发生,那么继承层次上的所有类都可以避免这个问题。

    相关文章

      网友评论

          本文标题:直接访问实例变量的init方法

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