美文网首页iOS 开发每天分享优质文章iOS点点滴滴
iOS的Runtime:load方法,以及load和initia

iOS的Runtime:load方法,以及load和initia

作者: jlstmac | 来源:发表于2023-04-12 11:27 被阅读0次

    load方法和initialize方法

    load方法在runtime的初始化时调用,也就是_objc_init方法中被调用

    image.png image.png

    call_load_methods()函数中调用load方法。

    load方法的调用顺序是先调用所有类的load方法,再调用分类的load方法。

    image.png

    调用load方法之前会先递归遍历其父类,先调用父类的load方法:

    image.png

    总结load的调用特点:

    1.先调用父类的load方法,再调用子类的load方法,最后调用分类的load方法。

    2.对于类与类之间的先后顺序看编译顺序。

    3.分类和类的load方法都会调用

    4.load方法调用发生在Runtime初始化,main函数之前

    load方法调用是通过函数地址调用,而非OC中常用的发送消息机制,每一个类有且只有调用一次(除非程序员主动调用)。

    b.initialize方法是通过objc_msgsend方式也就是发送消息的方式调用的:

    image.png image.png

    initialize的特点:

    1.initialize在首次接受到消息时调用。

    2.initialize通过objc_msgSend调用。所以遵循OC其他方法调用的特点。如果子类没有实现,会遍历其父类调用其父类的实现。

    3.由于第二条特点,一个initialize的调用可能不止一次。

    4.由于initialize是OC方法,所以如果分类实现了initialize实现会覆盖主类的实现。

    相关文章

      网友评论

        本文标题:iOS的Runtime:load方法,以及load和initia

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