美文网首页
Objective-C 笔记: 关于 +load 和 +init

Objective-C 笔记: 关于 +load 和 +init

作者: LispLY | 来源:发表于2019-02-27 18:40 被阅读0次
    • +load 如果不实现的话不会被调用,initialize 如果不实现的话会沿继承关系向上查找父类的实现。

    • 两者都会被自动调用,不要手动调用。

    • +load 方法中使用其他类是不安全的,因为其他类有可能尚未被设置好。

    • 如果某个类没有实现 +load ,那么系统不会调用它的父类中的 +load 方法。这个是因为系统并不是通过 msg_send() 这一套来调用 +load ,而是使用内部的 getLoadMethod() 查找。

    • +load 会阻塞整个应用程序,没必要的时候尽量不要使用。(可用于调试,比如判断 category 是否已载入。)

    • method swizzling 一般在 +load 中使用

    • initialize 是由 runtime 调用的,会在程序首次使用该类前调用,只调用一次。是线程安全的。会继承父类的实现。

    • initialize 不应该调用其他方法,只应该设置内部数据。(例如设置不能在编译器创建的全局常量。)

    • 一个对比图:


      图片来源:https://blog.csdn.net/qq_31810357/article/details/70622276

    参考:
    Effective Objective-C 2.0
    Objective-C +load vs +initialize
    iOS中 性能优化之浅谈load与initialize - 韩俊强的博客

    相关文章

      网友评论

          本文标题:Objective-C 笔记: 关于 +load 和 +init

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