load和initialize

下面是调用load的源码
调用时刻 runtime加载类、分类的时候 就会调用+(void)load方法
重点:load方法不是通过消息发送机制调用的!!!!
category也可以实现+load方法 并且都会执行
先调用类的load方法 再调用分类的load
父类的load会比子类的先走
整体调用顺序是 父类load - 子类load - 父类分类load - 子类分类load

image.png

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方法会走三次

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。