OC中的load和initialize的区别

OC中的load和initialize的区别

  1. 调用方式
    • load是根据函数地址直接调用
    • initialize是通过objc_msgSend调用
  2. 调用时刻
    • load是runtime加载类、分类的时候调用(只会调用1次)
    • initialize是类第一次接收到消息的时候调用 ,每一个类只会initialize一次(类的initialize方法可能会被调用多次,当子类没有实现initialize方法时)

load、initialize的调用顺序

load
  1. 先调用类的load方法
    • 先编译的类,优先调用load
    • 调用子类的load前,会先调用父类的load
  2. 再调用分类的load
    • 先编译的分类,优先调用load
initialize
  1. 先初始化父类
  2. 再初始化子类(当没有实现initialize时,就会调用父类的initialize方法)
  3. 如果分类实现了initialize方法,就会先调用分类的initialize

你可能感兴趣的:(OC中的load和initialize的区别)