美文网首页iOS开发攻城狮的集散地iOS 进阶ios进阶
iOS开发小坑·不要initWithFrame和init两个方法

iOS开发小坑·不要initWithFrame和init两个方法

作者: 小码僧 | 来源:发表于2018-10-09 12:33 被阅读97次
    小坑
    • 自定义的逻辑可以放在 initWithFrame,不要放在 init。不要两个方法都放,因为你放 initWithFrame 就足够了,即使你实际只调用 init 来初始化。

    • 这是因为,init 内部会调用父类的 initWithFrame: 方法,只不过传入的 frame 的值为0。然后,父类的 initWithFrame: 方法发现当前的调用对象是子类对象,所以就调用了子类的 initWithFrame 方法了。这是一个多态的应用。

    验证
    • 打个断点可以查看调用栈
    结论
    • init 方法最终会调用自己的 initWithFrame: 方法,所以不要两个方法都去实现,两个都去实现就重复执行了。一般可能也看不出来影响,但在要添加KVO观察者逻辑的时候就非常致命。

    • 一般只实现 initWithFrame: 即可,在这里面放你自己的初始化逻辑。

    • 这样一来,当你创建对象的时候就可以灵活选择:既可以通过 init 来初始化,也可以通过 initWithFrame:来初始化。

    • 像上面的截图就是错误的演示,init 那一部分完全没必要。

    相关文章

      网友评论

        本文标题:iOS开发小坑·不要initWithFrame和init两个方法

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