美文网首页
load initialize方法

load initialize方法

作者: 我真的不是张亮 | 来源:发表于2018-08-11 17:18 被阅读8次

    load

    1、分类中也是有load方法的

    2、load方法是runtime加载类、分类的时候系统自动调用的

    3、为什么子类有load子类、分类中有load方法不会覆盖父类的load方法

        因为+(void)load方法是系统自动调用的,而不是通过 [NSobject load]调用的,[NSobject load] 这样调用的本质就是消息发送,通过消息发送的方式寻找方法都是通过isa找到对应的类对象,然后在类对象或者元类对象中遍历方法寻找,但是分类的方法在原来类对象的前面,所以会覆盖,但是系统自动调用的load方法不是走的消息发送机制,而是通过各自(类或者分类,子类)的元类对象找到对应的load方法的指针地址,然后再来调用

    4、分类的加载顺序

        按照编译顺序加载类的load方法 但是在加载子类的load方法之前,会先加载父类的load方法,加载完类的load方法之后,就会调用分类的load方法,分类的load方法就是按照编译顺序加载了

    initialize

    +initialize 是在类第一次接收到消息的时候调用一次,而且是先调用父类的+initialize 再调用子类的+initialize

    + initialize 和 + load 的区别

        +initialize 是通过objc_msgSend 方法调用的,那么他就跟普通方法一样,通过isa指针找元类对象的 +initialize  如果没找到就会去父类中找+initialize ,所以父类的+initialize方法是有可能会调用多次的 

        如果分类实现了+initialize方法,那是会覆盖类本身的+initialize的。

    相关文章

      网友评论

          本文标题:load initialize方法

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