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实例对象被创建后,生命周期直到程序结束。