美文网首页
【iOS】initialize 和 load 方法

【iOS】initialize 和 load 方法

作者: cod_mm | 来源:发表于2015-11-13 16:17 被阅读0次

    类编译后,相关的数据结构会保留在目标文件中,在运行时得到解析和使用(类的加载和初始化)。在运行期提前并且自动调用这两个方法,我们可以利用他们在类被使用前,做一些预处理工作。

    initialize

    在类接收第一个消息之前调用,运行环境基本健全,运行过程中是线程安全的.
    父类接受这个消息在它的子类之前.
    父类initialize会被调用多次:如果子类没有实现initialize,runtime会调用从父类继承的initialize;或者子类调用[super initialize]。

    避免被多次调用如下:
    + (void)initialize {
    if (self == [ClassName self]) {
    // ... do the initialization ...
    }
    }

    load

    在类或类目被加载的时候调用
    类的load调用在父类load后
    类目的load调用在类本身load后

    load 和 initialize 的区别

    • 在不考虑开发者主动使用的情况下,系统最多会调用一次
    • 如果父类和子类都被调用,父类的调用一定在子类之前
    • 都是为了应用运行提前创建合适的运行环境
    • 在使用时都不要过重地依赖于这两个方法,除非真正必要

    load:只要类所在文件被引用就会被调用,
    initialize:在类或者其子类的第一个方法被调用前调用。
    所以如果类没有被引用进项目,就不会有load调用;但即使类文件被引用进来,但是没有使用,那么initialize也不会被调用。

    相关文章

      网友评论

          本文标题:【iOS】initialize 和 load 方法

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