iOS 开发每天分享优质文章iOS点点滴滴

iOS的Runtime:load方法,以及load和initia

2023-04-12  本文已影响0人  jlstmac

load方法和initialize方法

load方法在runtime的初始化时调用,也就是_objc_init方法中被调用

image.png image.png

call_load_methods()函数中调用load方法。

load方法的调用顺序是先调用所有类的load方法,再调用分类的load方法。

image.png

调用load方法之前会先递归遍历其父类,先调用父类的load方法:

image.png

总结load的调用特点:

1.先调用父类的load方法,再调用子类的load方法,最后调用分类的load方法。

2.对于类与类之间的先后顺序看编译顺序。

3.分类和类的load方法都会调用

4.load方法调用发生在Runtime初始化,main函数之前

load方法调用是通过函数地址调用,而非OC中常用的发送消息机制,每一个类有且只有调用一次(除非程序员主动调用)。

b.initialize方法是通过objc_msgsend方式也就是发送消息的方式调用的:

image.png image.png

initialize的特点:

1.initialize在首次接受到消息时调用。

2.initialize通过objc_msgSend调用。所以遵循OC其他方法调用的特点。如果子类没有实现,会遍历其父类调用其父类的实现。

3.由于第二条特点,一个initialize的调用可能不止一次。

4.由于initialize是OC方法,所以如果分类实现了initialize实现会覆盖主类的实现。

上一篇 下一篇

猜你喜欢

热点阅读