OC +initialize 詳解
原文
runtime 第一次使用類時,會調用該類的 +initialize 方法,用來類第一次初始化時做一些事情
調用方式
使用 objc_msgSend,即 isa, superClass 那一套機制來的。
調用順序
- 先調用父類的 +initialize 方法;
- 若父類沒有初始化過,則調用父類 +initialize 方法;
- 若父類初始化過,則不調用父類 +initialize 方法;
- 若父類的分類實作了 +initialize 方法,則調用父類的分類的 +initialize 方法,不再調用父類的 +initialize 方法,标記為已初始化。
- 再調用子類的 +initialize 方法;
- 若子類且子類分類沒有實作 +initialize 方法,則調用父類的 +initialize 方法。(即使父類之前初始化,也調用。因為 +initialize 是通過 objc_msgSend() 方式消息傳遞的)。