iOS底层原理--load和initialize
思考:load和initialize的区别?
一、调用时机区别
load:runtime加载类、分类时即调用,即只初始化一次
initialize:类第一次接收到消息时才调用,即只初始化一次
二、调用顺序区别
load:
{
1.先加载父类(同级别间按照编译先后顺序加载)
2.在加载子类
3.在加载分类
}
initialize:
{
1.先初始化父类
2.在初始化子类
备注:1.分类会覆盖原类的方法 2.若子类没有方法将调用父类,因此父类会被调用多次(调用多次,但是不代表初始化多次)
}
三、本质区别
load:函数指针地址调用
initialize:objc_msgSend方式调用
附:initialize内部伪代码实现
if(类没有初始化){
if(父类没有初始化){
//初始化父类initialize
}
//初始化类initialize
}

浙公网安备 33010602011771号