AppDelegate
父類是UIResponder。UIResponder繼承自NSObject
所有的移動操作系統都有個致命的缺點:app很容易受到打擾。比如一個來電或者鎖屏會導致app進入后臺甚至被終止;在app受到干擾時會產生一些系統事件,這時UIApplication會通知它的delegate對象(即AppDelegate)來處理,具體處理事件詳見本文的“AppDelegate處理的系統事件”
AppDelegate處理的系統事件
AppDelegate處理的系統事件:
1. 應用程序的生命周期事件(如程序啟動和關閉)
2. 系統事件(如來電)
3. 內存警告-
使用應用程序的生命周期方法(實質是UIApplicationDelegate協議中的方法)處理系統事件
// 應用程序啟動完成的時候調用 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSLog(@"%s",__func__); return YES; } // 當我們應用程序即將失去焦點的時候調用 - (void)applicationWillResignActive:(UIApplication *)application { NSLog(@"%s",__func__); } // 當我們應用程序完全進入后臺的時候調用 - (void)applicationDidEnterBackground:(UIApplication *)application{ NSLog(@"%s",__func__); } // 當我們應用程序即將進入前臺的時候調用 - (void)applicationWillEnterForeground:(UIApplication *)application { NSLog(@"%s",__func__); } // 當我們應用程序完全獲取焦點的時候調用 // 只有當一個應用程序完全獲取到焦點,才能與用戶交互. - (void)applicationDidBecomeActive:(UIApplication *)application { NSLog(@"%s",__func__); } // 當我們應用程序即將關閉的時候調用,一般沒什么用,因為應用程序關閉時也不能再進行什么操作 - (void)applicationWillTerminate:(UIApplication *)application { NSLog(@"%s",__func__); }
-
遵守UIApplicationDelegate協議,使用其他代理方法處理系統事件,常用的如下:
// app接收到內存警告時調用:清空不必要的內容 - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;
AppDelegate沒有獨有的方法用于響應事件
AppDelegate的唯一屬性
// 窗口不會銷毀時因為AppDelegate用window這個強指針指向它
AppDelegate.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
AppDelegate的內存管理
- UIApplication的代理是用assign屬性(ARC下即弱指針),AppDelegate也遵循代理皆用弱指針的原則;
- 它不被銷毀是因為:在ApplicationMain函數中,主線循環是死循環,所以它和UIApplicion實例對象被創建后,生命周期直到程序結束。