AppDelegate
父類是UIResponder。UIResponder繼承自NSObject
所有的移動(dòng)操作系統(tǒng)都有個(gè)致命的缺點(diǎn):app很容易受到打擾链沼。比如一個(gè)來電或者鎖屏?xí)?dǎo)致app進(jìn)入后臺(tái)甚至被終止;在app受到干擾時(shí)會(huì)產(chǎn)生一些系統(tǒng)事件匀们,這時(shí)UIApplication會(huì)通知它的delegate對(duì)象(即AppDelegate)來處理,具體處理事件詳見本文的“AppDelegate處理的系統(tǒng)事件”
AppDelegate處理的系統(tǒng)事件
AppDelegate處理的系統(tǒng)事件:
1. 應(yīng)用程序的生命周期事件(如程序啟動(dòng)和關(guān)閉)
2. 系統(tǒng)事件(如來電)
3. 內(nèi)存警告-
使用應(yīng)用程序的生命周期方法(實(shí)質(zhì)是UIApplicationDelegate協(xié)議中的方法)處理系統(tǒng)事件
// 應(yīng)用程序啟動(dòng)完成的時(shí)候調(diào)用 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSLog(@"%s",__func__); return YES; } // 當(dāng)我們應(yīng)用程序即將失去焦點(diǎn)的時(shí)候調(diào)用 - (void)applicationWillResignActive:(UIApplication *)application { NSLog(@"%s",__func__); } // 當(dāng)我們應(yīng)用程序完全進(jìn)入后臺(tái)的時(shí)候調(diào)用 - (void)applicationDidEnterBackground:(UIApplication *)application{ NSLog(@"%s",__func__); } // 當(dāng)我們應(yīng)用程序即將進(jìn)入前臺(tái)的時(shí)候調(diào)用 - (void)applicationWillEnterForeground:(UIApplication *)application { NSLog(@"%s",__func__); } // 當(dāng)我們應(yīng)用程序完全獲取焦點(diǎn)的時(shí)候調(diào)用 // 只有當(dāng)一個(gè)應(yīng)用程序完全獲取到焦點(diǎn),才能與用戶交互. - (void)applicationDidBecomeActive:(UIApplication *)application { NSLog(@"%s",__func__); } // 當(dāng)我們應(yīng)用程序即將關(guān)閉的時(shí)候調(diào)用,一般沒什么用,因?yàn)閼?yīng)用程序關(guān)閉時(shí)也不能再進(jìn)行什么操作 - (void)applicationWillTerminate:(UIApplication *)application { NSLog(@"%s",__func__); }
-
遵守UIApplicationDelegate協(xié)議冗栗,使用其他代理方法處理系統(tǒng)事件,常用的如下:
// app接收到內(nèi)存警告時(shí)調(diào)用:清空不必要的內(nèi)容 - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;
AppDelegate沒有獨(dú)有的方法用于響應(yīng)事件
AppDelegate的唯一屬性
// 窗口不會(huì)銷毀時(shí)因?yàn)锳ppDelegate用window這個(gè)強(qiáng)指針指向它
AppDelegate.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
AppDelegate的內(nèi)存管理
- UIApplication的代理是用assign屬性(ARC下即弱指針)供搀,AppDelegate也遵循代理皆用弱指針的原則隅居;
- 它不被銷毀是因?yàn)椋涸贏pplicationMain函數(shù)中,主線循環(huán)是死循環(huán)葛虐,所以它和UIApplicion實(shí)例對(duì)象被創(chuàng)建后胎源,生命周期直到程序結(jié)束。