下面是调用load的源码
调用时刻 runtime加载类、分类的时候 就会调用+(void)load方法
重点:load方法不是通过消息发送机制调用的!!!!
category也可以实现+load方法 并且都会执行
先调用类的load方法 再调用分类的load
父类的load会比子类的先走
整体调用顺序是 父类load - 子类load - 父类分类load - 子类分类load
image.png
image.png
image.png
initialize在 这个类第一次接收到消息调用 调用方式是通过消息发送机制调用的 但是和消息发送不同的是 调用initialize之前会调用父类的initialize (如果父类没有走过initialize方法 走过了就不会调用了 )
如果子类没有实现initialize 会调用父类的initialize
比如 B和C都是A的子类 并且只有A实现了initialize方法 调用[B alloc];[C alloc]的话
B alloc会先调用父类A的initialize方法 然后调用B的initialize方法 但是B没有实现initialize 所有就会调用父类的initialize 也就是A的initialize
C alloc和B的逻辑一样 只不过A已经调用过initialize 所以只会调用C的initialize 但是C没实现 所有调用A的initialize
所以A的initialize方法会走三次
网友评论