+load()、+initialize(),在类中、分类中调用顺
2018-09-12 本文已影响15人
达摩君
-
+load()在程序启动的时候都会调用一次,不需要调用这个类或者分类
-
+initialize()只在调用这个类的时候会调用,只会调用一次,如果是子类继承父类,先调用父类的initialize,再调用自己的,方法中不需要写
[super initialize]
. -
+initialize()如果分类中也写了,会先调用父类,再调用分类中的,不会调用自己类的initialize方法。(原理:因为有分类方法的时候,原有的class方法内存指针会后移分类方法的内存大小,然后分类方法会复制到后移的内存空隙中,方法调用的时候相当于先查找到的是分类方法,meta-class也是一样的逻辑。所以相同的方法名,先执行分类方法。但为什么+load()都会执行呢,因为它是直接找到内存进行调用,而initialize是通过msg_send消息发送调用的(isa))。