1. 程式人生 > >iOS開發:第一個iOS程式分析——代理,生命週期函式

iOS開發:第一個iOS程式分析——代理,生命週期函式

上一篇文章中我們開發了第一個iOS應用程式,用來計算兩個整數的和,今天我們將介紹其中的兩個檔案:

1.main.m檔案

首先展開supporting Files並且開啟其下的main.m檔案,其中main函式就是應用程式的入口,main函式只是標記了一個自動釋放池自動決定何時釋放記憶體,並且返回了一個函式UIApplicationMain的執行結果。

換句話說,main函式直接呼叫UIApplicationMain執行,該UIApplicationMain接受的比較重要的最後一個引數為一個代理類的名字,UIApplicationMain據此引數來建立這個AppDelegate代理類,由AppDelegate通過對Application的控制來控制程式的生命週期。

那麼什麼是代理(又叫委託模式):

蘋果官方文件對代理模式的解釋:

“Delegation is a simple and powerful pattern in which one object in a program acts on behalf of, or in coordination with, another object. The delegating object keeps a reference to the other object—the delegate—and at the appropriate time sends a message to it. The message informs the delegate of an event that the delegating object is about to handle or has just handled. The delegate may respond to the message by updating the appearance or state of itself or other objects in the application, and in some cases it can return a value that affects how an impending event is handled. The main value of delegation is that it allows you to easily customize the behavior of several objects in one central object.”


"代理是一種簡單而強大的設計模式,在這種模式下,程式中的一個物件與另一個物件進行協調或響應。代理類持有委託方的一個引用並且在適當的時候向委託方傳送一條訊息,該訊息通知委託方將有一個事件會被代理類處理或者代理類剛剛處理了一個事件。委託方可能會通過更新自身或其他物件的介面或狀態來響應這條訊息。在某些情況下他也能返回一個值來影響下一個即將被處理的事件。代理模式最主要的作用就是能夠允許你對圍繞同一個物件的多個物件進行更容易的自定義行為。"




接下來看看AppDelegate是通過哪些方法來控制Application的生命週期的:

2.AppDelegate.m檔案

開啟KZXAppDelegate.m檔案,有如下方法

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

- (void)applicationWillResignActive:(UIApplication *)application

- (void)applicationDidEnterBackground:(UIApplication *)application

- (void)applicationWillEnterForeground:(UIApplication *)application

- (void)applicationDidBecomeActive:(UIApplication *)application

- (void)applicationWillTerminate:(UIApplication *)application


這些方法都是以上介紹的——Application委託給AppDelegate處理的事件——都交給

AppDelegate管理。

didFinishLaunchingWithOptions根據函式名可以看出,

程式執行後最先發生的是didFinishLaunchingWithOptions

事件,Application通知AppDelegate處理該事件,

因此程式的初始化應該在這裡進行。

applicationWillResignActive:當程式將要失去焦點(變成不可見),

不能與使用者互動的時候呼叫,

該方法通常用來儲存一下介面狀態。

applicationDidEnterBackground:當程式已經進入後臺時呼叫,

此時應用程式完全不可見,

通常可以釋放一些進入後臺後不用的記憶體。

applicationWillEnterForeground:當程式即將進入前臺,

恢復可見並且可與使用者互動

的時候呼叫,通常用來恢復在applicationWillResignActive

方法儲存的狀態。

applicationDidBecomeActive:當程式回覆啟用狀態時呼叫,

此時介面可見,

使用者可以與程式互動,通常用來恢復程式狀態。

applicationWillTerminate:當程式結束時呼叫,

SDK4.0以前當用戶在當前程式執行時

按下Home鍵時呼叫,SDK4.0以上支援多工,

預設不會被執行,可以在Plist中設定

Application does not run in backgroud 為YES。

通常用來儲存資料,釋放所有資源。


總結一下:

1.和其他很多程式語言一樣(swift除外),Objective-C也是從main函式開始,

main函式使用代理類來管理程式的生命週期。

2.代理類KZXAppDelegate通過實現AppDelegate協議實現相應的方法來處理

委託方Application的事件,從而控制App的生命週期。


下次我們將討論AppDelegate.h檔案和檢視View。