-
+load
如果不实现的话不会被调用,initialize
如果不实现的话会沿继承关系向上查找父类的实现。 -
两者都会被自动调用,不要手动调用。
-
在
+load
方法中使用其他类是不安全的,因为其他类有可能尚未被设置好。 -
如果某个类没有实现
+load
,那么系统不会调用它的父类中的+load
方法。这个是因为系统并不是通过msg_send()
这一套来调用+load
,而是使用内部的getLoadMethod()
查找。 -
+load
会阻塞整个应用程序,没必要的时候尽量不要使用。(可用于调试,比如判断 category 是否已载入。) -
method swizzling
一般在+load
中使用 -
initialize
是由 runtime 调用的,会在程序首次使用该类前调用,只调用一次。是线程安全的。会继承父类的实现。 -
initialize
不应该调用其他方法,只应该设置内部数据。(例如设置不能在编译器创建的全局常量。) -
一个对比图:
图片来源:https://blog.csdn.net/qq_31810357/article/details/70622276
参考:
Effective Objective-C 2.0
Objective-C +load vs +initialize
iOS中 性能优化之浅谈load与initialize - 韩俊强的博客
网友评论