美文网首页程序员
+initialize和+load的区别

+initialize和+load的区别

作者: CoderKK | 来源:发表于2020-07-04 16:27 被阅读0次

+load方法

  • load方法会在runtime加载类、分类时调用 ( 常在这里做 方法交换 Method Swizzling)
  • 每个类、分类在程序运行过程中只调用 一次load方法
  • 调用顺序
    1.先调用类的+load
    按照编译顺序调用,先编译先调用
    调用子类的+load之前会先调用父类的+load
    2.再调用分类的+load
    按照编译顺序调用,先编译先调用
  • load方法是根据方法地址(*load_method)(cls, SEL_load)
    直接调用的,并不是经过objc_msgSend函数调用

+initialize方法

  • +initialize方法会在类第一次接收到消息时调用
  • 调用顺序
    先调用父类的+initialize,再调用子类的+initialize
    (相处初始化父类,再初始化子类,每个类只会初始化一次)

+initialize和+load的区别

+initialize是通过objc_msgSend调用的,所以有以下特点:如果子类没有实现+initialize,会调用父类的+initialize(所以父类的+intialize方法可以会被调用多次),如果分类实现的+initialize,就会覆盖类的+initialize调用。而+load是通过方法地址直接调用的,所以不会有这些特点。

相关文章

网友评论

    本文标题:+initialize和+load的区别

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