美文网首页
iOS底层学习7 -- initialize方法学习1

iOS底层学习7 -- initialize方法学习1

作者: 恋空K | 来源:发表于2020-06-16 00:21 被阅读0次

    由上图可知,Person在接收到test消息时,先调用了+initialize方法,在走test方法的现实。
    +initialize是通过消息机制去调用,而load方法是通过函数地址直接找到那个方法调用的~
    +initialize方法会在类第一次接收到消息时调用。




    由上图可知:+initialize的调用顺序,先调用父类的+initialize,在调用子类的+initialize。






    由上图可知:objc_msgSend内部肯定会调用+initialize方法的(objc_msgSend内部判断是不是第一次给类发送消息,如果是第一次给这个类发送消息,objc_msgSend内部就会调用这个类的+initialize方法)
    *消息发送机制补充:先通过isa ->找到类对象或者元类对象,找到对应的类对象或者元类对象后,就去寻找方法的实现,找到方法后就展开调用。没找到就通过superClass指针去父类或者父类的元类里面找。
    // isa -> 类对象/元类对象,寻找方法,调用。在调用方法之前肯定会先调用+initialize方法

    也就是在第一次调用方法之前必须保证先调用+initialize方法
    *class_getInstanceMethod是c语言现实的查找方法的~









    不管是找对象方法还是类方法,最终现实都会走到上面的结构中。









    相关文章

      网友评论

          本文标题:iOS底层学习7 -- initialize方法学习1

          本文链接:https://www.haomeiwen.com/subject/rrkfxktx.html