IOS程序啓動過程

程序啓動過程
這裏寫圖片描述
1.打開程序後先執行 SupportingFiels當中的main函數 在mian()函數中執行了一個UIApplicationMain()這個函數

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

1).UIApplicationMain當中的四個參數
UIApplicationMain(argh,argue,nil,NSStringFromClass([AppDelegate class]);
1)argh:使用main函數argc即可
2)argv:使用main函數argv即可
3)principalClassName:指定應用程序類名 (app 的象徵), 該類必須是UIApplication(或子類),如果爲nil,則用UIApplication類作爲默認值
4)delegateClassName:指定應用程序的代理類,UIApplicationDelegate協議中定義方法,在該類中是實現

3.UIApplicationMain 中執行操作


int main(int argc, char *argv[]) {    @autoreleasepool {
      return UIApplicationMain(argc, argv, @"UIApplication", @"AppDelegate");

      // 1.創建application對象

      // 2.創建application的代理對象

      // 3.把application和application的代理 進行綁定

      // 4.開始事件循環    } }

4.UIApplicationMain函數會:
(1)根據principalClassName創建UIApplication對象
(2)根據delegateClassName創建一個delegate對象,並將該delegate對象賦值給UIApplication對象中的delegate屬性

5.應用程序啓動後,會建立應用程序的Main Runloop(事件循環),監聽事件並調用註冊的方法
(1)首先會在程序完畢後調用delegate對象的application:didFinishLaunchingWithOptions:方法

6.程序正常退出時UIApplicationMain函數纔會返回


UIApplicationDelegate的簡單介紹

 // 程序第一次加載完成的時候調用
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSLog(@"didFinishLaunchingWithOptions");
    return YES;
}

 // 將要失去焦點 - 不能用戶交互
 - (void)applicationWillResignActive:(UIApplication *)application
{
    NSLog(@"applicationWillResignActive");
}

 // 已經獲取焦點 - 可以用戶交互
 - (void)applicationDidBecomeActive:(UIApplication *)application
{
    NSLog(@"applicationDidBecomeActive");
}

 // 已經進入後臺
 - (void)applicationDidEnterBackground:(UIApplication *)application
{
    NSLog(@"applicationDidEnterBackground");
    // 保存數據
}

 // 將要進入前臺
 - (void)applicationWillEnterForeground:(UIApplication *)application
{
    NSLog(@"applicationWillEnterForeground");
    // 恢復數據
}

 // 程序掛了!!!
 - (void)applicationWillTerminate:(UIApplication *)application
{
    NSLog(@"applicationWillTerminate");

    // 1.自動掛

    // 2.手動掛
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章