天天看點

OC +initialize 詳解

OC +initialize 詳解

原文

runtime 第一次使用類時,會調用該類的 +initialize 方法,用來類第一次初始化時做一些事情

調用方式

使用 objc_msgSend,即 isa, superClass 那一套機制來的。

調用順序

  1. 先調用父類的 +initialize 方法;
    • 若父類沒有初始化過,則調用父類 +initialize 方法;
    • 若父類初始化過,則不調用父類 +initialize 方法;
    • 若父類的分類實作了 +initialize 方法,則調用父類的分類的 +initialize 方法,不再調用父類的 +initialize 方法,标記為已初始化。
  2. 再調用子類的 +initialize 方法;
    • 若子類且子類分類沒有實作 +initialize 方法,則調用父類的 +initialize 方法。(即使父類之前初始化,也調用。因為 +initialize 是通過 objc_msgSend() 方式消息傳遞的)。

繼續閱讀