1. 所有类的 load 方法调用完毕之后再调用分类的 load 方法,类与分类的方法列表分别存储在对应的两个全局表中;
2. dyld 分别将类和分类添加到两个全局数组后,再循环取出这两个数组中的元素,递归执行 load方法,因为有这两个数组,所以分类的load不会覆盖原来类的load方法;
3. 在类先于分类调用、父类先于子类的大前提下,分类中 load 方法的调用顺序取决于符号表中的顺序,也就是编译顺序;
4. 在递归调用类的+load方法过程中,父类会先于子类调用,分类在最后调用;
5. 因为dyld中没有使用objc_msgSend来调用函数,而是直接执行,所以不存在方法查找和消息传递机制,所以子类未实现load方法的情况下也不去调用父类的load;
网友评论