美文网首页IOS
iOS +(void)load和+(void)initiali

iOS +(void)load和+(void)initiali

作者: 飞不越疯人院 | 来源:发表于2020-06-23 10:17 被阅读0次

对+(void)load和+(void)initialize进行总结 ;

+(void)load详解;
+(void) intialize详解;

1.+ (void)load的调用流程为?

+(void)load方法会在runtime编译加载类和分类时调用, 通过函数指针的方式直接调用, 并不是通过objc_msgSend()(此方式需要通过 isasuperclass来查找方法)的方式调用;

  1. +(void)load会在runtime加载类和分类时调用;
  2. 每个类/分类的+(void)load方法只会调用一次;
  3. 调用顺序多个类按照编译的顺序先后调用+(void)load方法;
  4. 调用子类的+(void)load方法时会先调用父类的+(void)load方法;
  5. 最后按照编译的顺序调用分类的+(void)load方法;
    具体验证部分参考分类(Category)部分二的开始部分;

2. +(void)initialzie的调用流程为?

通过objc_msgSend()的方式调用(需要通过 isasuperclass来查找方法);

  1. +(void)initialize方法会在类第一次收到消息时调用;
  2. 先调用父类方法+(void)initialize, 然后再调用子类的+(void)initialize;
  3. 每个类/分类的+(void)initialize方法只会调用一次(特殊情况:父类的可能会调用多次);
  4. 如果多个分类实现+(void)initialize方法则后面编译的会覆盖前面的分类和类的+(void)initialize方法;

相关文章

网友评论

    本文标题:iOS +(void)load和+(void)initiali

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