美文网首页oc基础
子类初始化时为什么要调用self=[super init]

子类初始化时为什么要调用self=[super init]

作者: 富城 | 来源:发表于2020-09-28 20:13 被阅读0次

因为子类继承自父类,需要获得父类的实例和方法等,所以初始化子类之前要先保证父类已经初始化完毕,防止出错。当调用'''self=[super init]'''方法时,如果父类初始化不成功,那么会返回'nil',所以可以根据self是否为nil判断父类是否初始化成功,从而进行合理地处理,以便起到容错效果。

引申:使用dealloc方法释放对象时,为什么一定要调用'''[super dealloc]'''方法?在何处调用?

  • 因为子类的很多实例变量是继承自父类的,所以要调用'''[super dealloc]'''方法来释放从父类继承来的实例变量,实际上还是释放自己的实例变量,只是继承来的这部分只能调用父类的dealloc方法来释放。
  • 按照自下往上的逻辑,一般要先释放子类的实例,然后释放父类的实例。自下往上的原因是,在调用'''[super dealloc]'''方法之前如果不先把子类中的变量从内存中释放掉,容易造成子类中变量的内存积压,导致内存泄漏,所以'''[super dealloc]'''方法应该在释放掉子类变量之后最后调用。当然在ARC中就不需要考虑这些问题了,变量会自动释放,此方法也不存在了。

相关文章

网友评论

    本文标题:子类初始化时为什么要调用self=[super init]

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