美文网首页
OC类的+load和+initialize方法

OC类的+load和+initialize方法

作者: Sweet丶 | 来源:发表于2019-03-16 17:01 被阅读0次

    学习这两个方法并非只是面试有用,在实际开发中或许能在想解决方案的时候能帮到你!

    一、认识这两个方法

    // 只在类或分类加载进内存的时候会调用一次
    + (void)load;
    // 只在类第一次被调用方法时系统先调用一次
    + (void)initialize;
    

    二、两个方法的作用

    1. 运用load方法只调用一次的特性,交换类中某个方法的实现代码可以写在这个方法里面。
    2. 运用initialize方法的特性,可以做一些初始化的设置, 这样就能在做到在真正使用的时候才去设置,如
      [[UINavigationBar appearance] setBarTintColor:[UIColor colorNamed:@"#645646"]];
    

    三、方法的调用顺序

    经过了代码的实践总结出来的,这里实践的过程省略。


    在这里查看编译顺序.png
    +load方法
    1. 在类/分类加载进内存的时候系统会先调用一次。
    2. 按照文件的编译顺序先调用项目中所有类的+load方法;在调用之前如果发现父类还没有被调用则会令父类先完成调用。
    3. 当项目中所有类的load都调用完之后,再开始调用项目中所有分类+的load。
    4. 分类中的调用就是按照分类的编译顺序来逐个调用,与父类子类继承关系无关。
    + initialize方法
    1. 会在类第一次被调用方法之前系统调用一次,且如果分类中有+ initialize,则调用的是分类中的+ initialize
    2. 在调用之前,如果发现有父类未调用+ initialize,则先会令父类去完成调用一次,然后自己调用一次。
    3. 调用父类的+ initialize时也是会优先调用分类中的+ initialize
    4. 有多个分类时是调用的最后编译的那个分类的+ initialize

    以上完结

    参考阅读:iOS程序启动过程
    深入理解iOS App的启动过程

    相关文章

      网友评论

          本文标题:OC类的+load和+initialize方法

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