Contents:
- MVC封装和解耦
- MVP架构思路
- MVVM架构思路
MVC
问题:1. vc代码过于沉重 2. 代码耦合性过高
轻量级vc:只负责建立model和view的依赖关系
通讯方式(model <--> view):通知,代理,block,指针,函数
MVP:面向协议编程
通过<font color=blue>代理</font>建立view和model之间的通讯
代理三部曲:写协议,实现,遵循
分类 + 协议 + 类 文件 在编译时map_images中加载进内存
插入:
自定义代码块:协议声明、代理调用、属性声明等,有利于快捷编码
block外通过
__weak typeof(self) weakSelf = self;
建立弱引用, 在block中再次__strong typeof(weakSelf) strongSelf = weakSelf;
建立强引用的作用:延长生命周期,防止对象已经被释放、超出作用域或者防止block中有耗时操作。代码移动快捷键,左移:cmd+[,上移:cmd+opt+[,右移:cmd+],下移:cmd+opt+]
-
view和vc分离
-(void)loadView{ self.view = self.customView; }
总结:通过代理实现数据和UI的双向绑定。
- 缺点:需要写代理+实现,代码量增多。
- 优点:vc解耦,单元测试,代码思路清晰(变化 接口 代理-》产品-》需求)面向接口编程 面向协议 面向需求 --- 需求驱动代码
MVVM
通过<font color=blue>block</font>和kvo建立view和model之间的通讯
引入RAC框架(ReactiveObjC)简化kvo代码
总结:网络请求放在viewModel中进行,使用block建立view和model之间的通讯
- 优点:block可以保存代码块,节省代码量。RAC+MVVM可以做到响应式
RAC核心原理:响应式编程
- 创建信号
- 订阅信号
- 发送信号
- 销毁信号