上一篇文章中咱們開發了第一個iOS應用程序,用來計算兩個整數的和,今天咱們將介紹其中的兩個文件:編程
1.main.m文件swift
首先展開supporting Files而且打開其下的main.m文件,其中main函數就是應用程序的入口,main函數只是標記了一個自動釋放池自動決定什麼時候釋放內存,而且返回了一個函數UIApplicationMain的執行結果。設計模式
換句話說,main函數直接調用UIApplicationMain執行,該UIApplicationMain接受的比較重要的最後一個參數爲一個代理類的名字,UIApplicationMain據此參數來建立這個AppDelegate代理類,由AppDelegate經過對Application的控制來控制程序的生命週期。app
那麼什麼是代理(又叫委託模式):編程語言
蘋果官方文檔對代理模式的解釋:函數
「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.」
spa
"代理是一種簡單而強大的設計模式,在這種模式下,程序中的一個對象與另外一個對象進行協調或響應。代理類持有委託方的一個引用而且在適當的時候向委託方發送一條消息,該消息通知委託方將有一個事件會被代理類處理或者代理類剛剛處理了一個事件。委託方可能會經過更新自身或其餘對象的界面或狀態來響應這條消息。在某些狀況下他也能返回一個值來影響下一個即將被處理的事件。代理模式最主要的做用就是可以容許你對圍繞同一個對象的多個對象進行更容易的自定義行爲。".net
接下來看看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。