前言:
這篇文章即是技術篇又是跟項目架構設計相關的文章,(個人是這樣感覺的),一直在搜集和總結產品架構方面的技術和技巧,很多時候都是自己知道,但是不知道怎么寫出來,恰好看到一篇別人的文章就借機在今天就簡述下load方法在簡化類的負載、結構化工程方面的實踐吧!在原文作者的基礎上,我又親測后添加了一些新的知識,大家比較后就會發現的,文章最后會附出我布局這篇文章的原文出處。
場景:
有時候一個比較大型的項目(是比較大型,算是中小型)中的AppDelegate類中是這樣的
Paste_Image.png
這還不算多的,有的可能更多,那么有沒有什么方法可以簡化AppDelegate 的設置呢?
思路
類別的一個作用就是類的分散實現,我們可以使用類別,對AppDelegate 擴充,這樣就可以把原本堆在一起的代碼分散到幾個類中實現,管理起來比較簡單,而且增加代碼的可讀性
在Objective-C中,絕大多數類都繼承自NSObject這個根類,而該類及其子類有load方法,可以用來實現初始化操作。對于加入運行期系統中的每個類(class)及分類(category)來說,必定會調用此方法,而且 load 方法不會被類自動繼承, 每一個類中的 load 方法都不需要像 viewDidLoad 方法一樣調用父類的方法
- 而且是程序啟動時,優先加載完所有類的 +load()方法,就算沒有導入頭文件,只要存在工程中會自動調用,這就是 +load()方法的神奇之處,那篇文章中,作者有幾個地方說的是有些不正確的。
并沒有導入頭文件,依然會執行
Paste_Image.png
Paste_Image.png
解決方案
Snip20161111_3.png
Snip20161111_4.png
Snip20161111_5.png
這里需要說一下,并不用導入兩個 對應的頭文件也可。
注意事項
- 與其他方法不同,load方法不參與覆寫機制
- +load方法實現得精簡一些,有助于保持應用程序的響應能力
- +initialize方法 ,它是“惰性”調用的,也就是說,只有當程序用到了相關的類時,才會調用。因此,如果某個類一直都沒有使用,那么其initialize方法就一直不會運行。這也就等于說,應用程序無須先把每個類的initialize都執行一遍,這個算是 +load方法的補充了。
- +initialize方法 對于每個類來說在整個app的生命周期里都只會執行一次,不管之后調用多少次,也就只執行一次,這個和 +load方法的特性是一樣的**
- +initialize方法 和 +load方法 對于單個類來說,寫在類別中的話, +load方法 只會被調用一遍,而 +initialize方法 的調用次數會和整個工程中對應的這個類的文件個數一致(有多少個對應的類,在這個類被調用到時,這個類的類別中的+initialize方法會被調用多少次)