iOS裏,所有的設計都遵循於MVC pattern,這是為何要了解MVC的所在,也是所有想寫iOS的設計者必須了解的原理。
須特別注意的是iOS裡,UI是屬於View,而不是Controller。
以下參照至github的MVC圖像 https://github.com/sebastienwindal/iOSPatterns/wiki/standard-iOS-patterns

圖中使用雙黃線/單向超車線明確指出MVC如何動作
MODEL |
所有資料。
MODEL可以間接與Control溝通的方式
Notification & Key-value Observing
|
有時候MODEL內的資料會變化,CONTROLLER必須要知道這些。
流程是:
MODEL發生變化時會藉由廣播的方式,發送一些資訊給關注此MODEL的CONTROLLER,稱之為KVO,使CONTROLLER做出對應的改變
|
|
VIEW |
使用者的可視範圍。
reference: target-action in apple developer
delegate&datasource in apple developer
VIEW可以間接與Control溝通的方式
Target-action
|
由CONTROLLER指定以下兩項:
一個Target(是一個CONTROLLER),
一個Action,這個action被賦予在VIEW裡,
流程是:
使用者對VIEW做些改變,VIEW(Sender)會發送訊息(Send)給Target,做些對應動作
|
Delegate |
當VIEW發生某種變化時,由於我們不會給予VIEW太多邏輯,使之能做出回應。
流程是:
當VIEW發生變化,會發送訊息給特定CONTROLLER,做出對應動作。
|
Data source |
在VIEW裡,我們不會希望它擁有資料 (例如列表中的歌曲/影片,etc.),
這些歌曲/影片應該是儲存於MODEL,
而列表屬於VIEW的範疇。
流程是:
當VIEW發生變化,會發送訊息給CONTROLLER,
CONTROLLER會向MODEL要求所需的數據,再提供給VIEW。
note:Data source 是種特殊的 Delegate。
|
|
CONTROL |
控制著Model/View的所有邏輯操作。 |