load与initialize对比

load

  1. +load方法会在runtime加载类、分类时调用
  1. 每个类、分类的+load,在程序运行过程中只调用一次
  1. 调用顺序:

3.1 先调用类的+load(按照编译先后顺序调用(先编译,先调用),调用子类的+load之前会先调用父类的+load)

3.2 再调用分类的+load(按照编译先后顺序调用(先编译,先调用))

initialize

  1. initialize方法会在类第一次接收到消息时调用
  1. 调用顺序

2.1 先调用父类的+initialize,再调用子类的+initialize

2.2 先初始化父类,再初始化子类,每个类只会初始化1次

load与initialize对比

条件 +load +initialize
关键方法 (*load_method)(cls, SEL_load) objc_msgSend
调用时机 被添加到 runtime 时 收到第一条消息前,可能永远不调用
调用顺序 父类->子类->分类 父类->子类
调用次数 1次 多次
是否需要显式调用父类实现
是否沿用父类的实现
分类中的实现 类和分类都执行 覆盖类中的方法,只执行分类的实现

你可能感兴趣的:(load与initialize对比)