文章目录
- MVC(Model-View-Controller)
- 参考博客:
- MVVM(Model-View-ViewModel)
- MVVM实例代码
- swiftUI(MVVM)
- 参考博客
MVC(Model-View-Controller)
iOS应用程序都遵循MVC架构,iOS13推出的SwiftUI除外,SwiftUI的设计遵循的MVVM. MVC是构建iOS App的标准模式,是苹果推荐的一个用来组织代码的权威范式,市面上大部分App都是这样构建的
- Model(模型):数据(业务)模型,负责处理和存取数据
- model里可能根本不是oc对象,可能是网络api. 数据库跟新了,模型得通知控制器
- View(视图):界面,负责显示数据和与用户交互
- Controller(控制器):业务逻辑,相当于一个处理中心,负责管理Model和View, Model和View都是控制器里的对象,主要负责将数据模型展示在视图上,同时也负责界面交互的处理。
- Model和View是不相通的,所有的事情,都只能通过控制器交换
- 控制器的任务就是展示模型,对模型了如执掌。
- 控制器为视图翻译和格式化它们需要的模型数据
- 控制UI如何显示就是它天天干的事情
控制器要和模型或是视图沟通是很容易的,因为控制器本身就持有模型和视图,模型和视图对象就是在控制器中创建的,所有控制器很容易就可以获取模型和视图对象的属性和方法
视图要和控制器沟通可以通过button添加点击(target-action)事件,delegate, datasource delegate
模型要和控制器沟通要通过kvo和通知(Notification)
会弄很多个MVC,层层包含,相互协助 iOS里有API,允许一个控制器把其他的MVC当作自己的视图,像图1.
图1
像下面图2,这样可不行,会把自己都看晕,所以打一个红圈圈,淘汰掉
图2
参考博客:
MVC框架_百度百科iOS MVC架构Cocoa的设计遵循了严格的MVC原则 - 百度百科Cocoa
MVVM(Model-View-ViewModel)
MVC虽然是storyboard项目中iOS app的标准模式,但是它也有一个别称叫Massive View Controller(重量级控制器),也就是当业务逻辑比较复杂的时候ViewController打代码会很多。为了给控制器瘦身,就引入ViewModel层用来处理网络请求,数据转换等业务逻辑(这些在MVC里也是由控制器来做)。而控制器更多的是负责和界面展示,用户交互相关的功能。并且把controller和view合并成View.
这样就由MVC衍生出MVVM架构。
- Model:数据
- View: 视图展示(UIView + UIViewController)
- ViewModel: 连接View和Model
MVVM实例代码
ios swift MVVM实例
swiftUI(MVVM)
iOS13推出的SwiftUI苹果的标准架构就是MVVM。不需要我们像在用storyboard的时候一样,本来苹果MVC是苹果的标准模式,我们硬是要拆一个MVVM出来
参考博客
杂谈: MVC/MVP/MVVM
【长篇高能】ReactiveCocoa 和 MVVM 入门
iOS MVVM+RAC 从框架到实战