上图先判断自己有没有初始化,自己没有初始化,就会进入_class_initialize方法。
进入了_class_initialize方法,就会判断父类有没有初始化,
父类一切ok了,才会进入上图的callInitialize方法
上图是callInitialize方法的现实。
每次调用alloc,里面都会做上图中的判断。
MJStudent 第一次调用alloc的时候,它就会进入判断里面,一旦进入里面,就意味着已经初始化了,既然已经初始化,那你后面在调用alloc的话,那上图中的条件(if(自己没有初始化))就不会成立,所以里面的代码永远都不会在执行。
上图中MJPerson的initialize方法调用了三次,但不代表MJPerson初始化了3次。而是分别代表MJPerson,MJStudent, MJTeacher,分别初始化了一次。第一句是MJPerson的初始化,第二句是MJStudent的初始化,第三句是MJTeacher的初始化, 只是MJStudent和MJTeacher没有现实initialize方法,所以通过消息发送机制,调用了MJPerson的initialize方法。
网友评论