MVC開發模式
什么是mvc,相信有一定開發經驗的程序員都應該知道。
M —— 模型,為程序提供數據
V —— 視圖,為用戶提供界面
C —— 控制器,用來控制程序視圖,即上面的V
在ios程序中,一個控制器對應一個視圖。為用戶呈現的是哪一個界面,由控制器決定。
下圖是xcode所創建的singleView程序的標准文件。
圖中的ViewController實際上就是控制器,而Main.storyboard的作用就是用來創建視圖的。因為xcode不知道你要提供什么數據,所以它不會幫你創建模型文件,一般這個責任都落在開發者自己的身上。
視圖是怎樣被創建的(UIScreen,UIWindow)
我們都知道,所有的界面都是畫出來的。因此,如何畫,在哪里畫就是一個問題。先不談論如何畫,我們說說在哪里畫。借用官方的一張圖片說一下
在圖中,程序畫了一個文本和一個按鈕,這些東西實際上都是在window(是一個UIWindow類)上畫的。
既然要畫東西,我們就必須知道畫紙(window)的尺寸,而這個window的尺寸就是屏幕的尺寸,一個UIScreen類代表一個屏幕,所以我們使用UIScreen類實例的尺寸初始化window的尺寸。在某些程序中往往會見到下面的代碼就是這個原因。
應用程序的生命周期,管理程序的狀態切換
由程序啟動到被銷毀,都會有一個階段,我們可以在不同的階段做不同的事情。AppDelegate文件就為我們提供了這個方便之門。AppDelegate類遵從了UIApplicationDelegate協議。該協議的主要工作是對程序的不同狀態作出響應。程序的狀態主要有:
- 未運行:程序沒有被用戶或系統啟動,或者已經被終止
- 未激活:程序已經被轉到前台執行,但是它還不能接收到事件,這個階段通常很短暫。
- 激活:程序這個時候已經可以處理事件,或者可以說正在和用戶交互。
- 后台運行:用戶不可見,但是仍然有能力執行一些代碼。
- 掛起:程序依然駐留在內存中,但是無法執行任何代碼。
下圖足以說明程序的狀態是怎樣切換的。
不同階段對應執行的方法:
啟動階段:
application:willFinishLaunchingWithOptions:
application:didFinishLaunchingWithOptions:
切換到前台:
applicationDidBecomeActive:
切換到后台:
applicationDidEnterBackground:
切換到未激活狀態:
applicationWillResignActive: (當程序由前台狀態離開時執行)
applicationWillEnterForeground: (當程序從后台狀態離開時執行)
終止:
applicationWillTerminate:
前面我們說的window屬性應該在哪里初始化呢,相信不用說大家都知道了:
application:willFinishLaunchingWithOptions:
因為在程序被激活之前我們就應該對相應的屬性進行初始化完畢,把window屬性定義在AppDelegate類里面進行初始化再適合不過了。




