Model:模型保存應用程序的數據。
View:視圖是模型的可視化表示以及用戶交互的控件;
Controller:控制器是一個協調所有工作的中介者(Mediator)。它訪問模型中的數據并在視圖中展示它們,同時它們還監聽事件和根據需要操作數據。
MVC 約定, Model 不允許與View 打交道。 Model 是管理數據的, 當Model中的數據發生變化時,與之對應的視圖應更新。 這就需要一種機制來支持。為此 iOS 框架提供了兩種支持機制: Notification 和KVO (Key-Value Observing)。 KVO 可簡單理解為,為你所關注的 Key 對象注冊一個監聽器。 當有數據發生變化時,就會發出廣播給所有的監聽器。
MVC 也約定, View 不允許直接引用Modal, 它只能被Controller 所控制。 Controller 控制 View 顯示什么數據。我們知道,View 所要顯示的數據是來源于 Modal, View 上產生的事件 ( 比如 Touch事件)需要通知 Controller。 既然MVC 不允許直接打交道,就需要提供一種機制: Delegate
我們看View 是怎么向 Controller 通信的。對于這個,? iOS 有三種常見的模式:
1,設置View對應的Action Target。如設置UIButton的Touch up inside的Action Target。
2,設置View的Delegate,如UIAlertViewDelegate, UIActionSheetDelegate,UITextFieldDelegate等。
3,設置View的data source, 如UITableViewDataSource。
通過以上三種模式,View既能向Controller通信,又無需知道具體的Controller是誰,這樣,View 就與Controller解耦了。
除此之外, iOS 還提供了 Action-Target 模式來讓Controller 監聽View 觸發的事件。 View 又是如何獲取數據呢? iOS提供了 Data source 的概念,其實也就是Protocol 的應用。