? ? ?所有基于C編寫的App的入口都是main函數(shù),但iOS應用程序有點不同。不同就是你不需要為iOS應用程序而自己編寫main函數(shù),當你使用Xcode創(chuàng)建工程的時候就已經(jīng)提供了。除非一些特殊情況,否則你不應該修改Xcode提供的main函數(shù)實現(xiàn)。示例代碼如下:
#import
#import"AppDelegate.h"
intmain(intargc,char*argv[]) {
@autoreleasepool{
returnUIApplicationMain(argc,
argv,nil,NSStringFromClass([AppDelegateclass]));
}}
UIApplicationMain主要是創(chuàng)建App的幾個核心對象來處理以下過程:
1 從可用Storyboard文件加載用戶界面;
2 調(diào)用AppDelegate自定義代碼來做一些初始化設置;
3 將App放入Main Run Loop環(huán)境中來響應和處理與用戶交互產(chǎn)生的事件。
程序狀態(tài)變化圖:
AppDelegate.m中的方法:
1.application didFinishLaunchingWithOptions:當應用程序啟動時執(zhí)行,應用程序啟動入口,只在應用程序啟動時執(zhí)行一次。若用戶直接啟動,lauchOptions內(nèi)無數(shù)據(jù),若通過其他方式啟動應用,lauchOptions包含對應方式的內(nèi)容。
2.applicationWillResignActive:在應用程序?qū)⒁苫顒訝顟B(tài)切換到非活動狀態(tài)時候,要執(zhí)行的委托調(diào)用,如按下home按鈕,返回主屏幕,或全屏之間切換應用程序等。
3.applicationDidEnterBackground:在應用程序已進入后臺程序時,要執(zhí)行的委托調(diào)用。
4.applicationWillEnterForeground:在應用程序?qū)⒁M入前臺時(被激活),要執(zhí)行的委托調(diào)用,剛好與applicationWillResignActive方法相對應。
5.applicationDidBecomeActive:在應用程序已被激活后,要執(zhí)行的委托調(diào)用,剛好與applicationDidEnterBackground方法相對應。
6.applicationWillTerminate:在應用程序要完全退出的時候,要執(zhí)行的委托調(diào)用,這個需要要設置UIApplicationExitsOnSuspend的鍵值。
加載應用進入前臺:
加載應用進入后臺:
注意:
設備鎖屏:
當手機鎖屏時,由狀態(tài)active切換到inactive,此時調(diào)用applicationWillResignActive:;然后再由inactive狀態(tài)切換到running狀態(tài),此時調(diào)用applicationDidEnterBackground:方法。
應用程序的終止:
系統(tǒng)常常是為其他app啟動時由于內(nèi)存不足而回收內(nèi)存最后需要終止應用程序,但有時也會是由于app很長時間才響應而終止。如果app當時運行在后臺并且沒有暫停,系統(tǒng)會在應用程序終止之前調(diào)用applicationWillTerminate:來保存用戶的一些重要數(shù)據(jù)以便下次啟動時恢復到app原來的狀態(tài)。