美文网首页
为什么不要在init和dealloc函数中使用accessor

为什么不要在init和dealloc函数中使用accessor

作者: Code_Ninja | 来源:发表于2015-10-12 15:25 被阅读197次

    今天在网上查找有关程序奔溃terminate_handler unexpectedly threw an exception的问题时偶然看到一篇文章为什么不要在init和dealloc函数中使用accessor仔细看了下,这个问题确实是日常写代码过程中很容易忽略的细节,又长知识了。这种问题,之前在写代码中也遇到过这种问题,后来解决了,但是没有深究其原因,惭愧,惭愧。

    这里Advanced Memory Management Programming Guide苹果给出了推荐做法,但是没有给出原因。

    苹果官方推荐写法.png

    看了为什么不要在init和dealloc函数中使用accessor中的例子,感觉不是很理解,照着作者的代码敲了一遍,果然跑起来报错,断点看了下程序执行步骤,还是想不通代码的调用顺序。归根结底还是自己对OC的runtime理解不够,程序的执行步骤是runtime的杰作。于是又搜得一篇文章Objective-C Runtime 运行时之六:拾遗看了其中对super的解释后再返回看上一篇文章作者的例子,就可以理解了。

    在这篇文章刨根问底Objective-C Runtime(1)- Self & Super中给出了self和super的解释:

    **
    self 是类的隐藏参数,指向当前调用方法的这个类的实例。而 super 是一个 Magic Keyword, 它本质是一个编译器标示符,和 self 是指向的同一个消息接受者。上面的例子不管调用[self class]还是[super class],接受消息的对象都是当前 Son *xxx 这个对象。而不同的是,super是告诉编译器,调用 class 这个方法时,要去父类的方法,而不是本类里的。
    当使用 self 调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找;而当使用 super 时,则从父类的方法列表中开始找。然后调用父类的这个方法。
    **

    参考
    为什么不要在init和dealloc函数中使用accessor

    Advanced Memory Management Programming Guide

    Objective-C Runtime 运行时之六:拾遗

    刨根问底Objective-C Runtime(1)- Self & Super

    相关文章

      网友评论

          本文标题:为什么不要在init和dealloc函数中使用accessor

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