UIApplication繼承自UIResponder,的主要作用是提供了iOS程序運行期間的控制和協作工作,每個iOS程序運行期間都會有一個UIApplication實例,一般由main函數的UIApplicationMain函數完成,而在代碼中可以調用[UIApplication sharedApplication]方法來得到這個實例(有且僅有一個),比如可以利用它判斷程序狀態:
if([UIApplication sharedApplication].applicationState ==UIApplicationStateInactive){
NSLog(@"程序在運行狀態");
}
新建一個任意類型的iOS應用工程,在AppDelegate.h中會看到
AppDelegate :UIResponder <UIApplicationDelegate>
即本類實現(采納)了一個名叫UIApplicationDelegate的接口,且表明AppDelegate這個類就是這個工程中UIApplication實例的代理類。
看看main函數:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
這里傳入了代理類到UIApplicationMain函數中,UIApplicationMain函數在生成唯一一個UIApplication的時候就可以把代理類的實例指針告訴這個單例對象了。
在UIApplicationDelegate中有很多方法,最重要無非就是
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions。
iOS程序啟動時總會調用此方法,其中第二個參數launchOptions為NSDictionary類型的對象,里面存儲有此程序啟動的原因。例如:若用戶直接啟動,lauchOptions內無數據; 若由其他應用程序通過openURL:啟動,則lauchOptions==UIApplicationLaunchOptionsURLKey對應的對象為啟動URL(NSURL),lauchOptions==UIApplicationLaunchOptionsSourceApplicationKey對應啟動的源應用程序的bundle ID (NSString)。