在写可复用而且高度解耦的用户统计埋点时碰到了 +load 方法。突然想起来 +initialize 方法。便查资料和自己动手来细致的了解了下。
+load 方法是类和分类被添加到 runtime 的时候被调用。
1、是在 main 函数之前执行的
2、不同对象文件的 +load 的执行顺序和 compile sources 有关,但不要利用 compile sources来实现代码逻辑。
3、执行顺序 父类—> 子类—>分类,且只会执行一次。
当然学习了加载顺序,加载时机,执行次数,就是为了使用它。一般 +load 用于 Method Swizzle。
+initialize 方法:
1、+initialize 方法是在第一次向类发送消息时调用。
2、执行顺序:父类->子类,当子类中没有实现 +initialize 方法时会调用两次父类 +initialize 方法
同时当分类中实现 +initialize 方法时,只会调用分类中的,类中的 +initialize方法不会再执行,当然执行次数也和子类中有没有实现 +initialize 方法有关。
+initialize 方法一般用于初始化全局变量或静态变量。