【iOS 中文開放式課程】iOS APP 架構與生命週期
我們需要您的贊助
Cocoa touch 觸碰層
主要提供給與用戶互動的框架:UI元件、事件管理、通知中心、地圖等。主要包含以下框架:
- UIKit(UI元件)
- EventKit(日曆事件提醒)
- Notification Center(通知中心)
- MapKit(地圖顯示)
- Address Book(聯絡人)
- iAd(廣告)
- Message UI(郵件與簡訊)
- PushKit(推播工具)
Media 多媒體層
主要提供處理圖像、音效和視訊的引擎框架。主要包含以下框架:
- Core Graphics、Core Image、Core Animation、OpenGL ES (圖像)
- Core Audio、 AV Foundation、OpenAL(音效)
- AV Foundation、Core Media (視訊)
Core Services 核心服務層
主要提供核心的系統服務,例如網絡訪問、瀏覽器引擎、定位、文件訪問、資料庫訪問等。主要包含以下框架:
- CFNetwork(網絡訪問)
- Core Data(數據存儲)
- Core Location(定位功能)
- Core Motion(重力加速度,陀螺儀)
- Foundation(基礎功能,如:NSString)
- Webkit(瀏覽器引擎)
- JavaScript(JavaScript引擎)
Core OS 核心作業系統層
主要提供核心作業系統的服務,如操作系統內部核心服務、本地端認證、安全、加速等。
- Accelerate 加速
- System 操作系統內核服務(線程、文件系統、數學計算等)
- LocalAuthentication 本地認證(指紋識別驗證等)
- Security 安全(提供管理證書、公鑰、密鑰等的接口)
MVC
Model : 資料模型
Controller : 控制資料在畫面中顯示的邏輯處理
View : UI元件,畫面顯示
Controller : 控制資料在畫面中顯示的邏輯處理
View : UI元件,畫面顯示
- Model 不會直接與 View 溝通,會透過 Controller
- Controller 是個中間人角色,可以直接跟 View 和 Model 溝通。
- Controller與 View 透過 outlet 連接。例如:control + 拖拽一個控件到 UIViewController 中,建立outlet連接,然後我們就可以在 UIViewController 中控制 UIView。
- View 與 Controller 則透過綁定的 action 和 target 來實現。例如一個按鈕可以綁定點擊事件到一個 target 的 action (action通常為@selector(func)這種格式),action為事件發生後的處理方法,而target則通常為對應的Controller)。
- View 透過設置 data source 和 delegate 為 Controller 來委託,Controller從Model中獲取資料數據,例如:UITableView中就會用到代理。
- Model要跟Controller通信則可以通過Notification和KVO(觀察者模式)機制來實現。
使用者操作裝置,相關的操作事件都會被系統生成並通過UIKit的指定端口分發。事件在內部排成隊列(event queue),一個個的分發到 Main run loop去做處理。
UIApplication對像是第一個接收到事件的對象,它決定事件如何被處理。觸碰事件分發到主窗口,窗口再分發到對應出發觸碰事件的View 上。其他的事件通過其他途徑分發給其他對像變量做處理。
常見的事件觸碰 (Touch),遠程操控事件(Remote control)都是由app的responder objects對象處理的。Responder objects在你的app裡到處都是,比如:UIApplication對象。view對象,view controller對象,都是resopnder objects。
大部分事件的目標都指定了resopnder object,不過事件也可以傳遞給其他對象。比如,如果view對像不處理事件,可以傳給父類view或者view controller。
大多數的事件通過使用main run loop來分發,但有些不是。有些事件被發送到一個delegate對像或傳遞到你提供的block中。
- Not running APP尚未開啟或運行
- Inactive 在前台運行,但沒有接收到事件。在沒有事件處理情況下程序通常停留在這個狀態
- Active 在前台運行而且接收到了事件。這也是前台的一個正常的模式
- Backgroud 在後台執行程式,大多數程序進入這個狀態後會在在這個狀態上停留一會。時間到之後會進入Suspended 狀態。有的程序經過特殊的請求後可以長期處於Backgroud狀態,例如播放音樂。
- Suspended 程序在後台且不能執行代碼。系統會自動把程序變成這個狀態而且不會發出通知。當Suspended時,程序還是停留在內存中的,當系統內存低時,系統就把掛起的程序清除掉,為前台程序提供更多的內存。