AppDelegate新識

/**
 * IOS 中的 AppDelegate.m/h 文件是很重要的呢霉颠,
   因為它是對 Application 的整個生命周期進行管理的艘虎。
 * 先明白泰鸡,每個iPhone應用程序都有一個UIApplication匾寝,
   UIApplication是iPhone應用程序的開始并且負責初始
   化并顯示UIWindow着降,并負責加載應用程序的第一個
   UIView到UIWindow窗體中屠缭。
 * UIApplication的另一個任務是幫助管理應用程序的生命周期澄者,
   而UIApplication通過一個名字為UIApplicationDelegate的
   代理類來履行這個任務病游。
 * 盡管 UIApplication 會負責接收事件,
   而UIApplicationDelegate則決定應用程序如何去響應這些事件狭吼,
   UIApplicationDelegate可以處理 的事件包括應用程序的
   生命周期事件(比如程序啟動和關(guān)閉)层坠、系統(tǒng)事件
   (比如來電、記事項警告)刁笙,本文會介紹如何加載應用程序的
   UIView到 UIWindow以及如何利用UIApplicationDelegate處理系統(tǒng)事件破花。 
 * 通常對于UIApplication讀者是沒必要修改它的,
   只需要知道UIApplication接收系統(tǒng)事件即可疲吸,
   而如何編寫代碼來處理這些系統(tǒng)事件 則 是程序員的工作座每。
 * 處理系統(tǒng)事件需要編寫一個繼承自UIApplicationDelegate接口的類,
   而 UIApplicationDelegate接 口提供生命周期函數(shù)來處理應用程序
   以及應用程序的系統(tǒng)事件摘悴,這些生命周期函數(shù)如下表所示:
 */
/**
 * 若用戶直接啟動峭梳,lauchOptions內(nèi)無數(shù)據(jù);
 * 若由其他應用程序通過openURL:啟動,則UIApplicationLaunchOptionsURLKey對應的對象為啟動 URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey對應啟動的源應用程序的 bundle ID (NSString);
 * 若由本地通知啟動葱椭,則UIApplicationLaunchOptionsLocalNotificationKey對應的是為啟動應用程序的的本地通知對象(UILocalNotification)捂寿;
 * 若由遠程通知啟動,則UIApplicationLaunchOptionsRemoteNotificationKey對應的是啟動應用程序的的遠程通知信息userInfo(NSDictionary);
 * 其他key還有UIApplicationLaunchOptionsAnnotationKey,UIApplicationLaunchOptionsLocationKey,UIApplicationLaunchOptionsNewsstandDownloadsKey孵运。
 *
 * 說明:當程序載入后執(zhí)行秦陋,應用程序啟動入口。
   只在應用程序啟動時執(zhí)行一次治笨。也就是說在應用程序啟動后驳概,要執(zhí)行的委托調(diào)用。
   application參數(shù)用來獲取應用程序的狀態(tài)旷赖、變量等顺又,
   值得注意的是字典參數(shù):(NSDictionary *)launchOptions,該參數(shù)存儲程序啟動的原因杠愧。
 */
- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSLog(@"當程序載入后執(zhí)行");
}


/**
 * 如果要在啟動時待榔,做出一些區(qū)分,那就需要在下面的代碼做處理流济。
 * 比如:應用可以被某個其它應用調(diào)起(作為該應用的子應用)锐锣,
   要實現(xiàn)單點登錄,那就需要在啟動代碼的地方做出合理的驗證绳瘟,
   并跳過登錄雕憔。
 * 例子如下代碼瑣事:
 */
- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{    
    NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];   
    if(url)    
    { 
        NSLog(@"%@", url);
    }   

    NSString *bundleId = [launchOptions objectForKey:UIApplicationLaunchOptionsSourceApplicationKey];   
    if(bundleId)  
    {
        NSLog(@"%@", url);
    } 

    UILocalNotification * localNotify = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];    
    if(localNotify)
    {
        NSLog(@"%@", localNotify);
    }    

    NSDictionary * userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];   
     if(userInfo)   
    { 
        NSLog(@"%@", userInfo);
    }
}
/** 
 *在應用程序?qū)⒁苫顒訝顟B(tài)切換到非活動狀態(tài)時候,
   要執(zhí)行的委托調(diào)用糖声,如 按下 home 按鈕斤彼,返回主屏幕,
   或全屏之間切換應用程序等蘸泻。
 *
 *說明:當應用程序?qū)⒁M入非活動狀態(tài)時執(zhí)行琉苇,
   在此期間,應用程序不接收消息或事件悦施,比如來電話了并扇。
 * /
 - (void)applicationWillResignActive:(UIApplication *)application
{
    NSLog(@"應用程序?qū)⒁M入非活動狀態(tài),即將進入后臺");
}
/**
 * 說明:當程序被推送到后臺的時候調(diào)用抡诞。
   所以要設(shè)置后臺繼續(xù)運行穷蛹,則在這個函數(shù)里面設(shè)置即可
 */
 - (void)applicationDidEnterBackground:(UIApplication *)application
{
    NSLog(@"如果應用程序支持后臺運行,則應用程序已經(jīng)進入后臺運行"); 
}
/** 
 * 說明:當程序從后臺將要重新回到前臺時候調(diào)用昼汗,這個剛好跟上面的那個方法相反肴熏。
 */
-  (void)applicationWillEnterForeground:(UIApplication *)application
{
    NSLog(@"應用程序?qū)⒁M入活動狀態(tài),即將進入前臺運行");
}
/** 
 * 說明:當應用程序進入活動狀態(tài)時執(zhí)行顷窒,這個剛好跟上面那個方法相反 蛙吏。
 */
- (void)applicationDidBecomeActive:(UIApplication *)application
{
    NSLog(@"應用程序已進入前臺,處于活動狀態(tài)");
}
/** 
 * 說明:當程序?qū)⒁顺鍪潜徽{(diào)用,通常是用來保存數(shù)據(jù)和一些退出前的清理工作鸦做。這個需要要設(shè)置UIApplicationExitsOnSuspend的鍵值璧疗。
 */
-  (void)applicationWillTerminate:(UIApplication *)application
{
    NSLog(@"應用程序?qū)⒁顺觯ǔS糜诒4鏀?shù)據(jù)和一些退出前的清理工作");
}
/** 
 * 說明:iPhone設(shè)備只有有限的內(nèi)存馁龟,如果為應用程序分配了太多內(nèi)存操作系統(tǒng)會終止應用程序的運行,在終止前會執(zhí)行這個方法漆魔,通晨篱荩可以在這里進行內(nèi)存清理工作防止程序被終止。
 */
-  (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
    NSLog(@"系統(tǒng)內(nèi)存不足改抡,需要進行清理工作");
}
/** 
 * 說明:當系統(tǒng)時間發(fā)生改變時執(zhí)行
 */
-(void)applicationSignificantTimeChange:(UIApplication *)application
{
    NSLog(@"當系統(tǒng)時間發(fā)生改變時執(zhí)行");
}
/** 
 * 說明:當StatusBar框?qū)⒁兓瘯r執(zhí)行
 */
-  (void)application:(UIApplication)application  willChangeStatusBarFrame:(CGRect)newStatusBarFrame
{
    NSLog(@"StatusBar框?qū)⒁兓?);
}
/** 
 * 說明:當StatusBar框方向?qū)⒁兓瘯r執(zhí)行
 */
-  (void)application:(UIApplication*)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration
{
}
/** 
 * 說明:當通過url執(zhí)行
 */
- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url
{
}
/** 
 * 說明:當StatusBar框方向變化完成后執(zhí)行
 */
-  (void)application:(UIApplication*)application  didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation
{
}
/** 
 * 說明:當StatusBar框變化完成后執(zhí)行
 */
-  (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame
{
}

另外還有一些協(xié)議方法需要知道:
Handling Remote Notifications (處理遠程消息)

/** 
 * 說明:當一個運行著的應用程序收到一個遠程的通知 發(fā)送到委托去...
 */
- (void)application:(UIApplication *)application 
didReceiveRemoteNotification:(NSDictionary *)userInfo 
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
/** 
 * 說明:當一個應用程序成功的注冊一個推送服務(APS) 發(fā)送到委托去...
 */
- (void)application:(UIApplication *)application 
didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
/** 
 * 說明:當APS無法成功的完成向程序進程推送時 發(fā)送到委托去...
 */
- (void)application:(UIApplication *)application
didFailToRegisterForRemoteNotificationsWithError:(NSError *)error

Handling Local Notification (處理本地消息)

/** 
 * 說明:當一個運行著的應用程序收到一個本地的通知 發(fā)送到委托去...
 */
-(void) **application**:(UIApplication *) **application**didReceiveLocalNotification:(UILocalNotification *)notification

Responding to Content Protections Changes(響應受保護內(nèi)容的改變)

/** 
 * 說明:通知委托矢炼,受保護的文件當前變?yōu)椴豢捎玫? */
-applicationProtectedDataWillBecomeUnavailable:
/** 
 * 說明:通知委托  受保護的文件當前變?yōu)榭捎? */
-applicationProtectedDataWillBecomeAvailable:

轉(zhuǎn)自:http://www.cnblogs.com/worldtraveler/p/4759602.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市阿纤,隨后出現(xiàn)的幾起案子句灌,更是在濱河造成了極大的恐慌,老刑警劉巖欠拾,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胰锌,死亡現(xiàn)場離奇詭異,居然都是意外死亡藐窄,警方通過查閱死者的電腦和手機资昧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荆忍,“玉大人格带,你說我怎么就攤上這事∩餐鳎” “怎么了叽唱?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長微宝。 經(jīng)常有香客問我棺亭,道長,這世上最難降的妖魔是什么芥吟? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任侦铜,我火速辦了婚禮,結(jié)果婚禮上钟鸵,老公的妹妹穿的比我還像新娘钉稍。我一直安慰自己,他們只是感情好棺耍,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布贡未。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪俊卤。 梳的紋絲不亂的頭發(fā)上嫩挤,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音消恍,去河邊找鬼岂昭。 笑死,一個胖子當著我的面吹牛狠怨,可吹牛的內(nèi)容都是我干的约啊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼佣赖,長吁一口氣:“原來是場噩夢啊……” “哼恰矩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起憎蛤,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤外傅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后俩檬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萎胰,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年棚辽,在試婚紗的時候發(fā)現(xiàn)自己被綠了奥洼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡晚胡,死狀恐怖灵奖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情估盘,我是刑警寧澤瓷患,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站遣妥,受9級特大地震影響擅编,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜箫踩,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一爱态、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧境钟,春花似錦锦担、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽套媚。三九已至,卻和暖如春磁椒,著一層夾襖步出監(jiān)牢的瞬間堤瘤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工浆熔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留本辐,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓医增,卻偏偏與公主長得像师郑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子调窍,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容