load initialize方法

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的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容