非原創(chuàng),收集,整理,覺得有用就羅列下為避免下次犯迷糊。

IOS 中的 AppDelegate.m/h 文件是很重要的呢,因為它是對 Application 的整個生命周期進行管理的,做一些全局變量的控制的。
//模板默認引入程序需要使用“類”的框架,即UIKit.h頭文件,使它包含在程序中
#import ?<UIKit/UIKit.h>
//此處@class聲明程序中的“類”名稱為MyViewController
@class MyViewController;
//此處@interface聲明程序界面的名稱為MyAppDelegate,其中NSObject表示它的“類”符合UIApplicationDelegate協(xié)議,接著UIApplicationDelegate,此方法為應用程序提供了關于觸發(fā)的關鍵事件信息,例如什么時候程序運行完成,什么時候內(nèi)存不足,什么時候重要變化發(fā)生
@interface MyAppDelegate:NSObject{
//定義一個程序顯示窗口的對象
UIWindow*window;
//加入視圖控制實際變量的對象
MyViewController*viewController;
}
//此處@Property聲明程序的屬性,并且加入在前面@interface中指定的相同對象,其中nonatomic是使用單線程機制減少系統(tǒng)資源使用,并將更改方法和修改方法生成在
//Property(屬性),
//接著retain,Property的可選項,表明向Property
(屬性)的對象發(fā)送一個retain(保留消息),
//而IBOutlet表示對象在InterfaceBuilder(Storyboard)中創(chuàng)建。
//例如下面的代碼在應用程序中顯示了一個窗口控件,
把這個控件連接到nib文件并顯示在InterfaceBuilder(Storyboard)
@property(nonatomic,retain)IBOutletUIWindow*window;
//又例如,代碼在應用程序中顯示了一個視圖控制控件,
把這個控件連接到nib文件并顯示在InterfaceBuilder(Storyboard)
@property(nonatomic,retain)IBOutletMyViewController*viewController;
//程序結束點,表明結束MyViewController.h文件
@end
iOS中的 AppDelegate.m/h 文件是很重要的呢,因為它是對 Application 的整個生命周期進行管理的。
先明白,每個iPhone應用程序都有一個UIApplication,UIApplication是iPhone應用程序的開始并且負責初始化并顯 示 UIWindow,并負責加載應用程序的第一個UIView到UIWindow窗體中。UIApplication的另一個任務是幫助管理應用程序的 生命 周期,而UIApplication通過一個名字為UIApplicationDelegate的代理類來履行這個任務。盡管 UIApplication 會負責接收事件,而UIApplicationDelegate則決定應用程序如何去響應這些事 件,UIApplicationDelegate可以處理 的事件包括應用程序的生命周期事件(比如程序啟動和關閉)、系統(tǒng)事件(比如來電、記事項警 告),本文會介紹如何加載應用程序的UIView到 UIWindow以及如何利用UIApplicationDelegate處理系統(tǒng)事件。
通 常對于UIApplication讀者是沒必要修改它的,只需要知道UIApplication接收系統(tǒng)事件即可,而如何編寫代碼來處理這些系統(tǒng)事件 則 是程序員的工作。處理系統(tǒng)事件需要編寫一個繼承自UIApplicationDelegate接口的類,而 UIApplicationDelegate接 口提供生命周期函數(shù)來處理應用程序以及應用程序的系統(tǒng)事件,這些生命周期函數(shù)如下表所示:
1、- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
NSLog(@"當程序載入后執(zhí)行");
}
說明:當程序載入后執(zhí)行,應用程序啟動入口。只在應用程序啟動時執(zhí)行一次。也就是說在應用程序啟動后,要執(zhí)行的委托調(diào)用。application參數(shù)用來獲取應用程序的狀態(tài)、變量等,值得注意的是字典參數(shù):(NSDictionary *)launchOptions,該參數(shù)存儲程序啟動的原因。
若用戶直接啟動,lauchOptions內(nèi)無數(shù)據(jù);
若由其他應用程序通過openURL:啟動,則UIApplicationLaunchOptionsURLKey對應的對象為啟動 URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey對應啟動的源應用程序的 bundle ID (NSString);
若由本地通知啟動,則UIApplicationLaunchOptionsLocalNotificationKey對應的是為啟動應用程序的的本地通知對象(UILocalNotification);
若由遠程通知啟動,則UIApplicationLaunchOptionsRemoteNotificationKey對應的是啟動應用程序的的遠程通知信息userInfo(NSDictionary);
其他key還有UIApplicationLaunchOptionsAnnotationKey,UIApplicationLaunchOptionsLocationKey,
UIApplicationLaunchOptionsNewsstandDownloadsKey。
如果要在啟動時,做出一些區(qū)分,那就需要在下面的代碼做處理。比如:應用可以被某個其它應用調(diào)起(作為該應用的子應用),要實現(xiàn)單點登錄,那就需要在啟動代碼的地方做出合理的驗證,并跳過登錄。
例子:- (BOOL)application:(UIApplication *)application?didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
NSURL *url = [launchOptionsobjectForKey:UIApplicationLaunchOptionsURLKey];
if(url){
}
NSString *bundleId = ?[launchOptionsobjectForKey:UIApplicationLaunchOptionsSourceApplicationKey];
if(bundleId)
{
}
UILocalNotification * localNotify = [launchOptionsobjectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
if(localNotify)
{
}
NSDictionary * userInfo = [launchOptionsobjectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if(userInfo)
{
}
}
2、-(void)applicationWillResignActive:(UIApplication *)application{
NSLog(@"應用程序將要進入非活動狀態(tài),即將進入后臺");
}
在應用程序將要由活動狀態(tài)切換到非活動狀態(tài)時候,要執(zhí)行的委托調(diào)用,如 按下 home 按鈕,返回主屏幕,或全屏之間切換應用程序等。說明:當應用程序將要進入非活動狀態(tài)時執(zhí)行,在此期間,應用程序不接收消息或事件,比如來電話了。
3、- (void)applicationDidEnterBackground:(UIApplication *)application{
NSLog(@"如果應用程序支持后臺運行,則應用程序已經(jīng)進入后臺運行");
}
說明:當程序被推送到后臺的時候調(diào)用。所以要設置后臺繼續(xù)運行,則在這個函數(shù)里面設置即可
4、-(void)applicationWillEnterForeground:(UIApplication *)application{
NSLog(@"應用程序將要進入活動狀態(tài),即將進入前臺運行");
}
說明:當程序從后臺將要重新回到前臺時候調(diào)用,這個剛好跟上面的那個方法相反。
5、- (void)applicationDidBecomeActive:(UIApplication *)application{
NSLog(@"應用程序已進入前臺,處于活動狀態(tài)");
}
說明:當應用程序進入活動狀態(tài)時執(zhí)行,這個剛好跟上面那個方法相反 。
6、-(void)applicationWillTerminate:(UIApplication *)application{
NSLog(@"應用程序將要退出,通常用于保存數(shù)據(jù)和一些退出前的清理工作");
}
說明:當程序將要退出是被調(diào)用,通常是用來保存數(shù)據(jù)和一些退出前的清理工作。這個需要要設置UIApplicationExitsOnSuspend的鍵值。
7、-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application{
NSLog(@"系統(tǒng)內(nèi)存不足,需要進行清理工作");
}
說明:iPhone設備只有有限的內(nèi)存,如果為應用程序分配了太多內(nèi)存操作系統(tǒng)會終止應用程序的運行,在終止前會執(zhí)行這個方法,通??梢栽谶@里進行內(nèi)存清理工作防止程序被終止。
8、-(void)applicationSignificantTimeChange:(UIApplication *)application{
NSLog(@"當系統(tǒng)時間發(fā)生改變時執(zhí)行");
}
說明:當系統(tǒng)時間發(fā)生改變時執(zhí)行
9、-(void)application:(UIApplication)applicationwillChangeStatusBarFrame:(CGRect)newStatusBarFrame{
NSLog(@"StatusBar框將要變化");
}
說明:當StatusBar框將要變化時執(zhí)行
10、-(void)application:(UIApplication*)application willChangeStatusBarOrientation: (UIInterfaceOrientation)newStatusBarOrientation ?duration:(NSTimeInterval)duration{
}
說明:當StatusBar框方向將要變化時執(zhí)行
11、- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url{
}
說明:當通過url執(zhí)行
12、-(void)application:(UIApplication*)applicationdidChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation{
}
說明:當StatusBar框方向變化完成后執(zhí)行
13、-(void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame{
}
說明:當StatusBar框變化完成后執(zhí)行
另外還有一些協(xié)議方法需要知道:
HandlingRemoteNotifications(處理遠程消息)
-(void)application:(UIApplication*)application?didReceiveRemoteNotification:(NSDictonary*)userinfo
說明:當一個運行著的應用程序收到一個遠程的通知發(fā)送到委托去...
-(void)application:(UIApplication*)application?didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
說明:當一個應用程序成功的注冊一個推送服務(APS)發(fā)送到委托去...
-(void)application:(UIApplication*)application?didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
說明:當APS無法成功的完成向程序進程推送時發(fā)送到委托去...
HandlingLocalNotification(處理本地消息)
-(void)application:(UIApplication*)application ?didReceiveLocalNotification:(UILocalNotification*)notification
說明:當一個運行著的應用程序收到一個本地的通知發(fā)送到委托去...
RespondingtoContentProtectionsChanges(響應受保護內(nèi)容的改變)
-applicationProtectedDataWillBecomeUnavailable:
說明:通知委托,受保護的文件當前變?yōu)椴豢捎玫?/p>
-applicationProtectedDataWillBecomeAvailable:
說明:通知委托受保護的文件當前變?yōu)榭捎?/p>
AppDelegate里定義全局,在其他類中賦值
在程序的AppDelegate類中定義,在appDelegate頁面把你要賦值的對象設置為appDelegate的屬性,
----取值----
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate yourParam];
----賦值----
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.yourParam = **
AppDelegate.h/m 中默認的方法:
1.?application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Tells the delegate when the application has launched and may have additional launch options to handle.
在應用程序啟動后,要執(zhí)行的委托調(diào)用。
2.?applicationWillResignActive:(UIApplication *)application
Tells the delegate that the application is about to become inactive.This method is called to let your application know that it is about to move from the active to inactive state.After calling this method, the application also posts a UIApplicationWillResignActiveNotification notification to give interested objects a chance to respond to the transition.
在應用程序將要由活動狀態(tài)切換到非活動狀態(tài)時候,要執(zhí)行的委托調(diào)用,如 按下 home 按鈕,返回主屏幕,或全屏之間切換應用程序等。
3.?applicationDidEnterBackground:(UIApplication *)application
Tells the delegate that the application is now in the background.Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.?If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
在應用程序已進入后臺程序時,要執(zhí)行的委托調(diào)用。
4.?applicationWillEnterForeground:(UIApplication *)application
Tells the delegate that the application is about to enter the foreground.Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
在應用程序將要進入前臺時(被激活),要執(zhí)行的委托調(diào)用,剛好與?applicationWillResignActive 方法相對應。
5.?applicationDidBecomeActive:(UIApplication *)application
Tells the delegate that the application has become active.Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
在應用程序已被激活后,要執(zhí)行的委托調(diào)用,剛好與applicationDidEnterBackground?方法相對應。
6.?applicationWillTerminate:(UIApplication *)application
Tells the delegate when the application is about to terminate.Called when the application is about to terminate. Save data if appropriate.
在應用程序要完全推出的時候,要執(zhí)行的委托調(diào)用。
