iOS中的MVC设计模式
生活随笔
收集整理的這篇文章主要介紹了
iOS中的MVC设计模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、MVC概述
模型-視圖-控制器(MVC)是Xerox PARC在二十世紀八十年代為編程語言Smalltalk-80發明的一種軟件設計模式,已被廣泛使用。后來被推薦為Oracle旗下Sun公司Java EE平臺的設計模式,并且受到越來越多的使用ColdFusion和PHP的開發者的歡迎。模型-視圖-控制器模式是一個有用的工具箱,它有很多好處,但也有一些缺點。 ?? 二、MVC各部分意義詳解 ? ? ? ? ? ?1.模型對象
模型對象封裝了應用程序的數據,并定義操控和處理該數據的邏輯和運算。例如,模型對象可能是表示游戲中的角色或地址簿中的聯系人。用戶在視圖層中所進行的創建或修改數據的操作,通過控制器對象傳達出去,最終會創建或更新模型對象。模型對象更改時(例如通過網絡連接接收到新數據),它通知控制器對象,控制器對象更新相應的視圖對象。
? ? ? 2.視圖對象
視圖對象是應用程序中用戶可以看見的對象。視圖對象知道如何將自己繪制出來,并可能對用戶的操作作出響應。視圖對象的主要目的,就是顯示來自應用程序模型對象的數據,并使該數據可被編輯。盡管如此,在 MVC 應用程序中,視圖對象通常與模型對象分離。
在iOS應用程序開發中,所有的控件、窗口等都繼承自 UIView,對應MVC中的V。UIView及其子類主要負責UI的實現,而UIView所產生的事件都可以采用委托的方式,交給UIViewController實現。
? ? ?3.控制器對象
在應用程序的一個或多個視圖對象和一個或多個模型對象之間,控制器對象充當媒介。控制器對象因此是同步管道程序,通過它,視圖對象了解模型對象的更改,反之亦然。控制器對象還可以為應用程序執行設置和協調任務,并管理其他對象的生命周期。
控制器對象解釋在視圖對象中進行的用戶操作,并將新的或更改過的數據傳達給模型對象。模型對象更改時,一個控制器對象會將新的模型數據傳達給視圖對象,以便視圖對象可以顯示它。
對于不同的UIView,有相應的UIViewController,對應MVC中的C。例如在iOS上常用的UITableView,它所對應的Controller就是UITableViewController。
三、傳統MVC交互模式
? ? ? 1.Controller負責調度View和Model。用戶操作View,View將交互動作傳遞至Controller,Controller通過Model更新數據做持久化存儲,并重置View。
? ? ? ?2.View通過Model獲取數據更新,然后顯示數據更新。
四、蘋果提倡的MVC交互模式:
1.Model和View永遠不能相互通信,只能通過Controller傳遞。
2.Controller可以直接與Model對話(讀寫調用Model),Model通過Notification和KVO機制與Controller間接通信。
3.Controller可以直接與View對話,通過outlet,直接操作View,outlet直接對應到View中的控件,View通過action向Controller報告事件的發生(如用戶Touch我了)。Controller是View的直接數據源(數據很可能是Controller從Model中取得并經過加工了)。Controller是View的代理(delegate),以同步View與Controller。
?
五、iOS開發中現實的MVC交互模式
? ? ? ?在我們的iOS開發中,通常我們并沒有按照蘋果提倡的交互模式來組織我們的代碼。
? ? ? ?iOS中的UIViewController將View和Controller集中在了一起,很多View的邏輯也是分布在了Controller中,導致View和Controller混合在一起,導致UIViewController臃腫而雜亂。
? ? ? ?就算我們使用XIB,但是并不是所有的View邏輯都能夠在XIB中實現的。而且現在普遍都不怎么使用XIB了,都是用純代碼去實現UI,造成View邏輯就完全充斥在了Controller中。
? ? ? ?解決方法:創建UIView的子類,把所有的View邏輯抽離到子類中,讓Controller單純的充當控制器的角色。
模型-視圖-控制器(MVC)是Xerox PARC在二十世紀八十年代為編程語言Smalltalk-80發明的一種軟件設計模式,已被廣泛使用。后來被推薦為Oracle旗下Sun公司Java EE平臺的設計模式,并且受到越來越多的使用ColdFusion和PHP的開發者的歡迎。模型-視圖-控制器模式是一個有用的工具箱,它有很多好處,但也有一些缺點。 ?? 二、MVC各部分意義詳解 ? ? ? ? ? ?1.模型對象
模型對象封裝了應用程序的數據,并定義操控和處理該數據的邏輯和運算。例如,模型對象可能是表示游戲中的角色或地址簿中的聯系人。用戶在視圖層中所進行的創建或修改數據的操作,通過控制器對象傳達出去,最終會創建或更新模型對象。模型對象更改時(例如通過網絡連接接收到新數據),它通知控制器對象,控制器對象更新相應的視圖對象。
? ? ? 2.視圖對象
視圖對象是應用程序中用戶可以看見的對象。視圖對象知道如何將自己繪制出來,并可能對用戶的操作作出響應。視圖對象的主要目的,就是顯示來自應用程序模型對象的數據,并使該數據可被編輯。盡管如此,在 MVC 應用程序中,視圖對象通常與模型對象分離。
在iOS應用程序開發中,所有的控件、窗口等都繼承自 UIView,對應MVC中的V。UIView及其子類主要負責UI的實現,而UIView所產生的事件都可以采用委托的方式,交給UIViewController實現。
? ? ?3.控制器對象
在應用程序的一個或多個視圖對象和一個或多個模型對象之間,控制器對象充當媒介。控制器對象因此是同步管道程序,通過它,視圖對象了解模型對象的更改,反之亦然。控制器對象還可以為應用程序執行設置和協調任務,并管理其他對象的生命周期。
控制器對象解釋在視圖對象中進行的用戶操作,并將新的或更改過的數據傳達給模型對象。模型對象更改時,一個控制器對象會將新的模型數據傳達給視圖對象,以便視圖對象可以顯示它。
對于不同的UIView,有相應的UIViewController,對應MVC中的C。例如在iOS上常用的UITableView,它所對應的Controller就是UITableViewController。
三、傳統MVC交互模式
? ? ? 1.Controller負責調度View和Model。用戶操作View,View將交互動作傳遞至Controller,Controller通過Model更新數據做持久化存儲,并重置View。
? ? ? ?2.View通過Model獲取數據更新,然后顯示數據更新。
四、蘋果提倡的MVC交互模式:
1.Model和View永遠不能相互通信,只能通過Controller傳遞。
2.Controller可以直接與Model對話(讀寫調用Model),Model通過Notification和KVO機制與Controller間接通信。
3.Controller可以直接與View對話,通過outlet,直接操作View,outlet直接對應到View中的控件,View通過action向Controller報告事件的發生(如用戶Touch我了)。Controller是View的直接數據源(數據很可能是Controller從Model中取得并經過加工了)。Controller是View的代理(delegate),以同步View與Controller。
?
五、iOS開發中現實的MVC交互模式
? ? ? ?在我們的iOS開發中,通常我們并沒有按照蘋果提倡的交互模式來組織我們的代碼。
? ? ? ?iOS中的UIViewController將View和Controller集中在了一起,很多View的邏輯也是分布在了Controller中,導致View和Controller混合在一起,導致UIViewController臃腫而雜亂。
? ? ? ?就算我們使用XIB,但是并不是所有的View邏輯都能夠在XIB中實現的。而且現在普遍都不怎么使用XIB了,都是用純代碼去實現UI,造成View邏輯就完全充斥在了Controller中。
? ? ? ?解決方法:創建UIView的子類,把所有的View邏輯抽離到子類中,讓Controller單純的充當控制器的角色。
總結
以上是生活随笔為你收集整理的iOS中的MVC设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 获取iOS任意线程调用堆栈(二)符号化理
- 下一篇: BeanUtils.copyProper