[iOS Tutorial] 1 淺談 iOS 與貫穿一切的 MVC (Model–View–Controller)

八月 13, 2012  Comments by

如果在這此之前你有充份的 Object-Oriented Programming 經驗,恭喜你,接下來的路途你會過得很輕鬆愉快,甚至語法與技巧方面都不足以構成你的障礙。如果之前沒有相關的經驗也不需要擔心,稍有程式設計背景的人,應該都不會被難倒,甚至在兩三篇文章之後就可以很順利的進入狀況。下面這個詞記牢牢記住,往後會有詳細說明。

Message (sent to object to make it act) – 通常 obj.doSomething() 的行為我們稱為 obj 呼叫 doSomething();在 Objective-C 寫做 [obj dosomething],我們稱傳送一道 doSomething 訊息給 obj。

在開始之前,下面這一張圖足以闡述 iOS 的全部,只要記得最上面那一層 Cocoa Touch 即可,Cocoa Touch 這一層 Layer 將佔所有教學內容的 90% 以上。

開發環境 (development environment),工具採用的是 Xcode 4、語言是 Objective-C,與 iOS SDK 提供的 Frameworks,最後是不可或缺的 MVC (Model–View–Controller)

MVC 之所以重要在於 iOS 的所有設計都遵循著 Model-View-Controller 的設計原則,從元件上的命名可以得知 (UIView、WebView、TableView、UIViewController、UINavigationController、UITabBarController)。

  • Model – App 中所有的資料 (通訊錄 App 裡的所有聯絡人)
  • View – 所有使用者看得到的畫面
  • Controller –  如何利用 Model 來呈現畫面 (View) 的所有邏輯
  • 雙黃線 – 禁止 Model 與 View 直接間接的接觸
  • 白色虛實線 – Controller 可以直接一手跟 Model 拿資料,另一手命令 View 做事;但 Model 與 View 卻不能直接與 Controller 溝通,只能透過間接的方式委曲求全。

 CS193P 以交通標誌來表達三者之間的關係真是太有才了,一目瞭然,看了就不會忘記,這也是為什麼 MVC 這麼多人在講,還是硬生生的要擺一張圖來解釋的原因。

而這一張圖的種種機制,就是剛才提到的,我們在 iOS 開發過程中,View 和 Model 會透過何種間接的方式與 Controller 做溝通。
View 有三種方式。

  • Action – Target :Controller 明白告訴 View「事情發生的時候,你可以做 action,action 的行為內容請找 target 要」。而這個 target 通常是 Controller。
  • Delegate:Controller 指派一個隨從 (delegate) 給 View,這個隨從會處理N件事,遇到這些事請通報他。這個隨從通常也是 Controller。
  • DataSource:Controller 指派一個倉管 (dataSource) 給 View,這個倉管可以提供部分資訊來源,需要索取這些資料請叫他。這個倉管也往往是 Controller (笑)。

Model 只有一種。

  • Notification & KVO:Model 透過主動廣播的方式,讓 Controller 知道資料有所變更;背後的運作原理是透過 KVO 的方式 (Key-Value Observing),當 Model 廣播的訊息帶有某個 Key 值,而這個 Key 值列在 Controller 的觀察名單內時,Controller 就會收到資料更新的訊息,接著可以做相對應的處理動作。

 

iOS 入門教學

About the author

喜愛攝影、自助旅行、一邊宅在家帶小孩一邊創業的 App 設計師。