app應用程序是由 自己編寫代碼+系統框架(system frameworks)構成
-
Main函數入口
1.從可用Storyboard文件加載用戶界面
2.調用AppDelegate自定義代碼來做一些初始化設置
3.將app放入Main Run Loop環境中來響應和處理與用戶交互產生的事件
-
應用程序的構架
iOS應用程序都遵循Model-View-Controller的架構,Model負責存儲數據和處理業務邏輯,View負責顯示數據和與用戶交互,Controller是兩者的中介,協調Model和View相互協作。它們的通訊規則如下
1.Controller能夠訪問Model和View,Model和View不能互相訪問
2.當View與用戶交互產生事件時,使用target-action方式來處理
3.當View需要處理一些特殊UI邏輯或獲取數據源時,通過delegate或data source方式交給Controller來處理
4.Model不能直接與Controller通信,當Model有數據更新時,可以通過Notification或KVO (Key Value Observing)來通知Controller更新View
MVC模式下iOS應用程序有哪些關鍵對象以及它們職責
- UIApplication對象
用戶與iOS設備交互時產生的事件(Multitouch Events,Motion Event,Remote Control Event)交由UIApplication對象來分發給control objects(UIControl)對應的target objects來處理并且管理整個事件循環,而一些關于app運行時重要事件委托給app delegate來處理。
- App delegate對象
App delegate對象遵循UIApplicationDelegate協議,響應app運行時重要事件(app啟動、app內存不足、app終止、切換到另一個app、切回app),主要用于app在啟動時初始化一些重要數據結構;例如,初始化UIWindow,設置一些屬性,為window添加rootViewController。
- View controller對象
View Controller有一個view屬性是view層次結構中的根view,你可以添加子view來構建復雜的view;controller有一些viewDidLoad、viewWillAppear等方法來管理view的生命周期;由于它繼承UIResponder,所有還會響應和處理用戶事件。
- Documents和data model對象
data model對象主要用來存儲數據。例如,餓了么app在搜索切換地址后,有歷史記錄搜索地址歷史,當app下次啟動時,讀取和顯示搜索地址歷史。
document對象(繼承UIDocument)用來管理一些或所有的data model對象。document對象并不是必須的,但提供一種方便的方式來分組屬于單個文件或多個文件的數據。
- UIWindow對象
UIWindow對象位于view層次結構中的最頂層,它充當一個基本容器而不顯示內容,如果想顯示內容,添加一個content view到window。
它也是繼承UIResponder,所以它也是會響應和處理用戶事件。
- View、control、layer對象
View對象可以通過addSubview和removeFromSuperview 等方法管理view的層次結構,使用layoutIfNeeded和setNeedsLayout等方法布局view的層次結構,當你發現系統提供view已經滿足不了你想要的外觀需求時,可以重寫drawRect方法或通過layer屬性來構造復雜的圖形外觀和動畫。還有一點,UIView也是繼承UIResponder,所以也能夠處理用戶事件。
Control對象通常就是處理特定類型用戶交互的View,常用的有button、switch、text field等。
除了使用View和Control來構建view層次結構來影響app外觀之外,還可以使用Core Animation框架的Layer對象來渲染view外觀和構建復雜的動畫。
……(未完)