美文网首页
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的启动过程

相关文章

  • 技术点

    1、oc中 load 和initialize 方法的异同? 连接 load 方法: 对于每个类(class)及分类...

  • iOS+load和+initialize详解

    转自:iOS类方法load和initialize详解iOS - + initialize 与 +load load...

  • OC类的+load和+initialize方法

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

  • iOS学习回顾

    oc部分 1. load和initialize的区别(利用load方法,MJRefresh在app启动时 在UIT...

  • load方法和initialize方法的区别整理

    load方法解析- initialize方法解析 load 和 initialize方法的区别: 1、 调用方式:...

  • 方法

    load 和 initialize 方法的执行顺序以及类和对象的关系

  • OC中的load和initialize方法

    OC 中有两个特殊的类方法,分别是 load 和 initialize。本文总结一下这两个方法的区别于联系、使用场...

  • +load和+initialize

    +load和+initialize +load 与 +initialize 的异同 +load 方法会在 main...

  • laod和initialize

    laod和initialize +load +load方法会在runtime加载类、分类时调用,每个类、分类的+l...

  • 06 +initialize

    源码分析: 注意:父类的initialize方法会被调用多次 总结:+load 和+initialize的区别:

网友评论

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

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