load和initialize方法

2018-12-14  本文已影响0人  土豆赶着鸡

前言

我们将3个类A、B、C分别表示为父类、子类、子类的分类来了解load和initialize

注意:
1.下文中所说的类都是直接或者间接继承NSObject
2.这里只分析的类中实现+load和+initialize方法的情况,不包含主动调用

使用场景

调用时机

调用次数

执行的顺序

方法实现方式

子类和父类

比如 父类A 中分别实现+load、+initialize方法,子类B中不实现+load、+initialize方法
执行的顺序 [A load] -> [A initialize] -> [A initialize]

类和类别

安全性

其他注意点

  1. 在方法中如果使用super,load执行的顺序和次数依旧保持不变,但是initialize的执行顺序和次数会变动,会调用多次,所以开发中尽量不要使用super

2.在A、B、C的其中两个类的+load方法中去都实现方法的替换操作,由于方法置换2次使置换失效,所以+load中替换等操作加上dispatch_once保持执行一次

3.不要去主动去调用load或者initialize方法,会失去他们调用的“唯一性”

4.load方法不会直接触发initialize的调用,但是不要再+load出现self等类方法的调用,会使initialize的方法提前出现,原因是使该类的第一条消息提前发生

上一篇 下一篇

猜你喜欢

热点阅读