美文网首页
+load 和 +initialize的区别

+load 和 +initialize的区别

作者: SunnyWendy | 来源:发表于2021-10-14 11:21 被阅读0次

+load方法

① +load方法时通过地址直接访问的

② +load方法会在加载类、分类时调用。只要类被添加到runtime中,就会调用+load方法。

③ 每个类、分类的+load方法,在运行过程中只调用一次

调用顺序

① 先调用类的+load 方法 ,再调用分类的+load方法

②按照编译顺序,先编译先调用,调用子类的+load之前会先调用父类的+load

注意

我看见有的文章说“因为调用子类的+load方法之前会调用父类的+load,所以父类的+load方法会调用多次”,这种说法是错误的,每个类的+load的方法只会调用一次,如果之前父类的+load方法已经被调用,那么子类将不会再调用父类的+load。

例如SuperClass有两个子类SubClass1和SubClass2,编译顺序为SubClass1、SubClass2、SuperClass,那么+load方法的调用顺序为:SuperClass,SubClass1,SubClass2。


+ initialize

① +initialize方法时通过msg_send函数调用的

② 只有当类第一次被发送消息时才会执行,不一定会执行。

调用顺序

①因为是通过msg_send进行调用,所以会方法覆盖,覆盖顺序为分类-> 子类 -> 父类。只有一个+initialize会被执行

②如果子类没有实现+initialize,会调用父类的+initialize。所以父类的+initialize可能会被调用多次。

③如果有多个分类实现了+initialize,会调用最后加载的分类的+initialize。

相关文章

网友评论

      本文标题:+load 和 +initialize的区别

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