本來我想自己寫一篇關於這個話題的文章,但是看到網上已經有了,所以就轉載過來給大家作為參考。
原帖地址:http://blog.chinabyte.com/a/1557371.html
iOS MVC 學習基礎是本文要介紹的內容,先來看內容。相信說起MVC(Model-View-Controller)大家都很熟悉。在iOS開發中MVC的機制被使用的淋漓盡致,並且我覺得在iOS上寫程式,充分理解iOS的MVC模式,有助於我們程式的組織合理性,相反,我們不遵守MVC的一些約定,程式是可以寫的,但就等著受苦了。
下面我只對一些約定列一個表,並且說一下iOS的支援機制啊,算分享給大家:
1、Model不允許和Controller,View打交道。也就是Model根本不知道誰會用自己,Model中不能有任何對Controller和View的引用。正所謂:Don't call me, I will call you.就是給Model設計說的。
我們再想想,在一般程式中Model到處被拿去用,它要維護到底誰用真的很難。那你會問:兄弟,那當Model的資料變了,我怎麼通知視圖更新呢?這裡常用的機制就是廣播模式,或者電台模式,或者事件機制都行。在iOS中有兩種支援機制:Notification和KVO(Key-Value Observing)。
這兩種東西原理差不多,KVO是iOS中的一個核心概念,簡單理解就是:關注Model某個資料(Key)的對象可以註冊為監聽器,一旦Model某個Key的Value發生變化,就會廣播給所有的監聽器。這和Flex,JavaFX中的綁定都是一個道理。
2、View不允許直接引用Controller和Model,它很專一地被Controller控制來進行資料的顯示和接收使用者的互動。我們知道View顯示的時候需要資料,我們也知道在View上會產生事件。如果要達到不和Controller,Model直接打交道,就需要機制來支援。
在Objective-C中有Protocol的東西,並且提出Delegate(代理模式)就是來解決UIView想和Controller松耦合互動問題的。除了這個外,iOS還提供了Action-Target模式來讓Controller監聽View的事件。那對View如何獲得資料,iOS中提了Data Source的概念,其實也是Protocol的應用。
3、每一次推給使用者的一個操作螢幕,最好都是MVC的三者組合,不要出現一組以上的MVC組合。