美文网首页
iOS load 和 initialize

iOS load 和 initialize

作者: 7890陈 | 来源:发表于2019-06-14 15:14 被阅读0次

    load 和 initialize 是 NSObject 的两个类方法,下面介绍这两个方法

    // load 方法,官方文档中的描述
    Invoked whenever a class or category is added to the Objective-C runtime;
    // 每当向Objective-C runtime 中添加类或类别时调用
    implement this method to perform class-specific behavior upon loading.
    // 实现此方法用于加载执行特定的类行为
    
    // initialize 方法,官方文档中的描述
    Initializes the class before it receives its first message.
    // 在类收到第一条消息之前初始化它
    

    相同点:
    1、在开发者不主动使用的情况下,系统会自动调用一次
    2、都是为了APP运行提前创建合适的运行环境

    load:

    1、执行顺序,SuperClass --> SubClass --> Category
    Human 的子类 Person 的子类 Man

    2019-06-14 14:13:07.115353+0800 Test[6635:1199762] Human load
    2019-06-14 14:13:07.115785+0800 Test[6635:1199762] Person load
    2019-06-14 14:13:07.115846+0800 Test[6635:1199762] Man load
    2019-06-14 14:13:07.115906+0800 Test[6635:1199762] Man category load
    2019-06-14 14:13:07.115960+0800 Test[6635:1199762] Person category load
    2019-06-14 14:13:07.116011+0800 Test[6635:1199762] Human category load
    

    没有关系的不同类调用顺序不确定,所以不要在此方法中调用另一个类
    2、在 main() 函数执行前调用,通常用来进行 Method Swizzle

    initialize:

    1、运行时以线程安全的方式向类发送initialize()消息。也就是说,initialize()由第一个线程运行以向类发送消息,并且任何其他试图向该类发送消息的线程都将阻塞,直到initialize()完成
    2、如果类和分类都实现了 initialize,只会执行分类中的方法。如果子类、子类分类、父类、父类分类都实现了,子类发送消息,会调用子类分类和父类分类的 initialize ,如果子类未实现,还是会调用父类实现的 initialize
    3、在 main() 函数之后执行
    4、可以安全使用并调用任意类中的任意方法

    相关文章

      网友评论

          本文标题:iOS load 和 initialize

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