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實例對象被創建后,生命周期直到程序結束。
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容