App的組成可視為撰寫程式碼(Custom Code)系統架構(System Frameworks)的互動,系統架構提供基本的運作模式,我們撰寫程式碼(Custom Code)讓App依照我們想要的方式去運作。若要寫好一個App,我們就要深入瞭解系統架構(System Frameworks)。
Main Function
每個C應用程式都會一個main function的進入點,iOS app也是一樣;不一樣的是iOS app的main function不用自行撰寫。XCode會在建立專案時自動產生main function,下面是main function示意程式碼。
import UIKit
func main(argc:Int, argv:[String]) -> String
{
return UIApplicationMain(argc, argv, nil, NSStringFromClass(new AppDelegate()));
}
main function主要會呼叫UIApplicationMain函式,UIApplicationMain函式主要會建立App的核心物件、從storyboard載入使用者介面、呼叫自行撰寫的程式碼,有機會做初始化及捕捉使用者的動作。開發者主要提供的是storyboard檔案及初始化程式碼。
App的結構
應用程式啟動時UIApplicationMain函式會建立關鍵物件並讓App執行;對每個iOS App最關鍵的物件是UIApplication,它主要的工作是協調系統與App中的物件之間的互動。下圖顯示每個App會出現的關鍵物件,以及它們之間的互動,而下表列出了每個物件的主要角色。
首先需要注意的是是iOS Apps使用Model-View-Controller架構;這個模式將應用程式資料及商業邏輯從使用者介面中分離;這樣設計很重要的好處是可讓Apps能在不同機裝置及不同螢幕畫面上執行。
物件
|
描述
|
UIApplication物件管理事件迴圈及其它高階應用程式行為,它也會反應用程式關鍵的轉換及特殊事件(例如push notifications)給在應用程式中自訂的物件來處理。每個iOS App只會有一個UIApplication物件。
| |
App delegate物件
|
UIApplication物件是掌握iOS App的核心物件,而App delegate則是撰寫自訂程式碼的核心物件,App delegate與UIApplication物件一同合作,處理應用程式啟始、應用程式狀態轉換及其它App事件。App delegate一定會在每個App中出現,所以常用它來初始化App需要的資料結構。
|
Documents and data model objects
|
資料模型物件(Data model objects)用來儲存App專屬資料,舉例來說銀行App會儲存財務交易記錄、繪畫App會儲存使用者筆畫及順序資料。App可以使用document objects來管理資料模型物件,這是提供個方便的方法來管理,但並不是必要性的,開發者也可用自己的方式來管理。詳細可以參考Document-Based App Programming Guide for iOS。
|
View controller objects
|
View controller 物件管理螢幕上呈現的App內容,一個View Controller管理單一View及它的子集合。實際呈現內容時View Controller會讓View狀態成為可見的,在App的視窗呈現。
UIViewController類別是所有View Controller物件的基礎類別,它提供了基本的功能包括載入Views、顯示它們,根據裝置旋轉而旋轉螢幕畫面,以及其他標準系統行為。
UIKit及其他Framework會定義其他的View Controller類別去實作其他的介面包括Image Picker、Tab Bar Interface及Navigation Interface。
|
UIWindowobject
|
UIWindow物件用來代表視窗,協調一到多個View在主畫面中呈現,大部份的Apps只會有一個視窗。要改變App的內容,使用View Controller來改變顯示的View,並在對應的Windows上呈現;我們不會改變Windows本身。
除了代管Views外,UIWindow也與UIApplication合作將事件傳遞給Views及View controlls。
|
View objects,control objects, and layer objects
|
Views及Controls是實際顯示App內容的元素,Views物件用來在特定區域內顯示繪畫內容,並且會對於該區內的事件反應;Controls則是對於特定的使用者動作進行回應,像是Buttons、Text Fields…等。
UIKit Framework提供了許多標準的Views用來顯示內容,您也可以定義繼承自UIView用來定義自己的Views。
|
沒有留言:
張貼留言