AppDelegate

AppDelegate

  1. 父类是UIResponder。UIResponder继承自NSObject

  2. 所有的移动操作系统都有个致命的缺点:app很容易受到打扰。比如一个来电或者锁屏会导致app进入后台甚至被终止;在app受到干扰时会产生一些系统事件,这时UIApplication会通知它的delegate对象(即AppDelegate)来处理,具体处理事件详见本文的“AppDelegate处理的系统事件”

AppDelegate处理的系统事件

  1. AppDelegate处理的系统事件:
    1. 应用程序的生命周期事件(如程序启动和关闭)
    2. 系统事件(如来电)
    3. 内存警告

  2. 使用应用程序的生命周期方法(实质是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__);
    }
    
  3. 遵守UIApplicationDelegate协议,使用其他代理方法处理系统事件,常用的如下:

    // app接收到内存警告时调用:清空不必要的内容
    - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;
    
    
  4. AppDelegate没有独有的方法用于响应事件

AppDelegate的唯一属性

// 窗口不会销毁时因为AppDelegate用window这个强指针指向它
AppDelegate.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

AppDelegate的内存管理

  1. UIApplication的代理是用assign属性(ARC下即弱指针),AppDelegate也遵循代理皆用弱指针的原则;
  • 它不被销毁是因为:在ApplicationMain函数中,主线循环是死循环,所以它和UIApplicion实例对象被创建后,生命周期直到程序结束。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容