- 以前寫(xiě)過(guò)一篇關(guān)于Appdelegate的文章,當(dāng)時(shí)對(duì)其他的很多功能和使用技巧還是不是很清楚,只做了一些簡(jiǎn)短的介紹,之后自己做了一些測(cè)試,也查閱了很多大神的博客和資料,下面就談一談我的一些基本理解:
1.AppDelegate基本認(rèn)識(shí)
要說(shuō)AppDelegate就得從程序啟動(dòng)開(kāi)始,由以下代碼可以看出,AppDelegate就是一個(gè)App的代表,所有基于App層級(jí)的操作都需要在其內(nèi)完成
// UIApplicationMain主要負(fù)責(zé)了:從給定的類(lèi)名初始化應(yīng)用程序?qū)ο笳岬 慕o定的應(yīng)用程序委托類(lèi)古徒,初始化一個(gè)應(yīng)用程序委托翎卓、啟動(dòng)主事件循環(huán),并開(kāi)始接收事件
// 第三個(gè)參數(shù) principalClassName -- UIApplication 或 UIApplication 子類(lèi)疚脐,nil 默認(rèn)為 UIApplication
// 第四個(gè)參數(shù) delegateClassName -- AppDelagate 類(lèi)名
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
2.AppDelegate的基本應(yīng)用環(huán)境
蘋(píng)果的官方文檔都建議應(yīng)該由AppDelegate來(lái)處理這些工作:
- 1.app的啟動(dòng)代碼;
- 2.響應(yīng)app的狀態(tài),比如app切換到后臺(tái)和前臺(tái)等狀態(tài)锌奴;
- 3.響應(yīng)外部傳遞給app的通知孵户,比如說(shuō)push萧朝,low-memory warnings;
- 4.決定了app的狀態(tài)是否應(yīng)該保存或者恢復(fù)夏哭;
- 5.響應(yīng)不是發(fā)送給特定view或者vc检柬,而是發(fā)送給app本身的事件;
- 6.用來(lái)保存一些不屬于特定vc的數(shù)據(jù)竖配。
雖然官方家建議將上述操作放在AppDelegate來(lái)處理,但是一個(gè)業(yè)務(wù)邏輯稍復(fù)雜點(diǎn)的項(xiàng)目,上述6點(diǎn)的所有功能的代碼直接一股腦塞到一個(gè)文件里,能不臃腫才怪了,所以就有了第三點(diǎn).
3.針對(duì)臃腫的AppDelegate我們需要采取的措施與方法
-
1.在AppDelegate的分類(lèi)中實(shí)現(xiàn)相關(guān)邏輯(可根據(jù)功能或控制器進(jìn)行分類(lèi)實(shí)現(xiàn)).
10001-8C24-30A8415130EE.png - 2.使用協(xié)議何址,協(xié)議里面聲明的就是類(lèi)似UIApplicationDelegate代理方法。業(yè)務(wù)組件里面添加一個(gè)遵循這個(gè)協(xié)議的對(duì)象进胯,實(shí)現(xiàn)你想在AppDelegate里面實(shí)現(xiàn)的對(duì)應(yīng)方法用爪。
- 3.使用單例類(lèi),添加全局變量NSMutableArray用于存放各業(yè)務(wù)組件里面的問(wèn)題2中的對(duì)象胁镐,在主工程AppDelegate的代理方法里面遍歷數(shù)組調(diào)用各業(yè)務(wù)組件里面問(wèn)題1對(duì)象的協(xié)議方法偎血,當(dāng)然诸衔,這個(gè)遍歷數(shù)組、調(diào)用方法的實(shí)現(xiàn)應(yīng)該放在單例類(lèi)里面實(shí)現(xiàn)颇玷。
實(shí)現(xiàn)思路是這樣的笨农,具體實(shí)現(xiàn)給大家提供一個(gè)示例:
image.png
image.png
DMUserCenterModule:用戶中心模塊上面提到的對(duì)象。DMApplicationDelegate:上面提到的協(xié)議帖渠。DMAppDelegateManager:?jiǎn)卫?lèi)谒亦。
DMUserCenterModule維護(hù)在各個(gè)業(yè)務(wù)組件里面;DMApplicationDelegate空郊、DMAppDelegateManager 一般維護(hù)在與業(yè)務(wù)不太相關(guān)的弱組件庫(kù)里面诊霹。