前言:
這篇文章即是技術(shù)篇又是跟項(xiàng)目架構(gòu)設(shè)計(jì)相關(guān)的文章,(個(gè)人是這樣感覺(jué)的)鼻忠,一直在搜集和總結(jié)產(chǎn)品架構(gòu)方面的技術(shù)和技巧,很多時(shí)候都是自己知道杈绸,但是不知道怎么寫(xiě)出來(lái)帖蔓,恰好看到一篇?jiǎng)e人的文章就借機(jī)在今天就簡(jiǎn)述下load方法在簡(jiǎn)化類(lèi)的負(fù)載、結(jié)構(gòu)化工程方面的實(shí)踐吧瞳脓!在原文作者的基礎(chǔ)上塑娇,我又親測(cè)后添加了一些新的知識(shí),大家比較后就會(huì)發(fā)現(xiàn)的劫侧,文章最后會(huì)附出我布局這篇文章的原文出處埋酬。
場(chǎng)景:
有時(shí)候一個(gè)比較大型的項(xiàng)目(是比較大型,算是中小型)中的AppDelegate類(lèi)中是這樣的
這還不算多的烧栋,有的可能更多,那么有沒(méi)有什么方法可以簡(jiǎn)化AppDelegate 的設(shè)置呢写妥?
思路
類(lèi)別的一個(gè)作用就是類(lèi)的分散實(shí)現(xiàn),我們可以使用類(lèi)別审姓,對(duì)AppDelegate 擴(kuò)充珍特,這樣就可以把原本堆在一起的代碼分散到幾個(gè)類(lèi)中實(shí)現(xiàn),管理起來(lái)比較簡(jiǎn)單魔吐,而且增加代碼的可讀性
在Objective-C中扎筒,絕大多數(shù)類(lèi)都繼承自NSObject這個(gè)根類(lèi),而該類(lèi)及其子類(lèi)有l(wèi)oad方法酬姆,可以用來(lái)實(shí)現(xiàn)初始化操作嗜桌。對(duì)于加入運(yùn)行期系統(tǒng)中的每個(gè)類(lèi)(class)及分類(lèi)(category)來(lái)說(shuō),必定會(huì)調(diào)用此方法轴踱,而且 load 方法不會(huì)被類(lèi)自動(dòng)繼承, 每一個(gè)類(lèi)中的 load 方法都不需要像 viewDidLoad 方法一樣調(diào)用父類(lèi)的方法
- 而且是程序啟動(dòng)時(shí)症脂,優(yōu)先加載完所有類(lèi)的 +load()方法谚赎,就算沒(méi)有導(dǎo)入頭文件淫僻,只要存在工程中會(huì)自動(dòng)調(diào)用诱篷,這就是 +load()方法的神奇之處,那篇文章中雳灵,作者有幾個(gè)地方說(shuō)的是有些不正確的棕所。
并沒(méi)有導(dǎo)入頭文件,依然會(huì)執(zhí)行
解決方案
這里需要說(shuō)一下悯辙,并不用導(dǎo)入兩個(gè) 對(duì)應(yīng)的頭文件也可琳省。
注意事項(xiàng)
- 與其他方法不同,load方法不參與覆寫(xiě)機(jī)制
- +load方法實(shí)現(xiàn)得精簡(jiǎn)一些躲撰,有助于保持應(yīng)用程序的響應(yīng)能力
- +initialize方法 ,它是“惰性”調(diào)用的针贬,也就是說(shuō),只有當(dāng)程序用到了相關(guān)的類(lèi)時(shí)拢蛋,才會(huì)調(diào)用桦他。因此,如果某個(gè)類(lèi)一直都沒(méi)有使用谆棱,那么其initialize方法就一直不會(huì)運(yùn)行快压。這也就等于說(shuō),應(yīng)用程序無(wú)須先把每個(gè)類(lèi)的initialize都執(zhí)行一遍,這個(gè)算是 +load方法的補(bǔ)充了垃瞧。
- +initialize方法 對(duì)于每個(gè)類(lèi)來(lái)說(shuō)在整個(gè)app的生命周期里都只會(huì)執(zhí)行一次蔫劣,不管之后調(diào)用多少次,也就只執(zhí)行一次个从,這個(gè)和 +load方法的特性是一樣的**
- +initialize方法 和 +load方法 對(duì)于單個(gè)類(lèi)來(lái)說(shuō)脉幢,寫(xiě)在類(lèi)別中的話(huà), +load方法 只會(huì)被調(diào)用一遍嗦锐,而 +initialize方法 的調(diào)用次數(shù)會(huì)和整個(gè)工程中對(duì)應(yīng)的這個(gè)類(lèi)的文件個(gè)數(shù)一致(有多少個(gè)對(duì)應(yīng)的類(lèi)鸵隧,在這個(gè)類(lèi)被調(diào)用到時(shí),這個(gè)類(lèi)的類(lèi)別中的+initialize方法會(huì)被調(diào)用多少次)