關于初始化的一些知識

  • 每個類都有一個initialize的類方法,在類的其他方法被觸發前,都會先調用這個類方法;
  • 因為每個類只會調用一次initialize,所以這里可以做一些類的版本設置之類的事情
  • runtime會給繼承鏈上的每個類都發送這個initialize消息,即使某個類并沒有實現這個類方法,這就可能會出現某個類的initialize被多次調用的情況(子類沒有實現該類方法,從而調用了父類的initialize類方法)
  • 不要顯示調用initialize類方法,真的需要觸發初始化,可以通過[MyClass self];這樣的方式來進行
  • 可以通過dispatch_once的方法來實現代碼只運行一次,也可以通過判別self來確定當前的代碼執行上下文,兩種方式如下:
    // 類似單例的初始化
    + (void)initialize {
        static dispatch_once_t onceToken = 0;
        dispatch_once(&onceToken, ^ {
            // execute only once
        });
      }

    // 識別當前上下文
    + (void)initialize {
        if (self == [MyClass class]) {
            // initialize code here
        }
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,937評論 18 139
  • 轉至元數據結尾創建: 董瀟偉,最新修改于: 十二月 23, 2016 轉至元數據起始第一章:isa和Class一....
    40c0490e5268閱讀 1,774評論 0 9
  • 1. 什么是 ARC? (ARC 是為了解決什么問題而誕生的?) ARC 是 Automatic Referenc...
    milk_powder閱讀 698評論 0 5