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

}

 

posted @ 2020-08-05 17:29  银榇  阅读(240)  评论(0)    收藏  举报