load方法与initialize方法的区别

转自作者:劳模007_Mars
链接:https://www.jianshu.com/p/bc3e9fa647cc

调用方式
1.load是根据函数地址直接调用
2.initialize是通过objc_msgSend调用
调用时刻
1.load是runtime加载类、分类的时候调用(只会调用1次)
2.initialize是类第一次接收到消息的时候调用,每一个类只会initialize一次(父类的initialize方法可能会被调用多次)
调用顺序
load
1.先调用类的load
a) 先编译的类,优先调用load
b) 调用子类的load之前,会先调用父类的load
2.再调用分类的load
a) 先编译的分类,优先调用load
initialize
1.先初始化父类
2.再初始化子类(可能最终调用的是父类的initialize方法)
是否覆盖方法
load
分类中的load方法不会覆盖本类的load方法
initialize
分类中的initialize方法会覆盖本类的initialize方法

你可能感兴趣的:(load方法与initialize方法的区别)