1.MVC
MVC:是一种架构模式,M:model V:view C:controller
1.Model负责存储、定义、操作数据
2.View用来展示给用户,和用户进行操作交互
3.Controller是Model和View的协调者,Controller把modle中的数据拿过来给View用。Controller可直接与model和View进行通信,而View不能和Controller直接通信。view与Controller通信需要利用代理协议方式,当有数据更新时,model也要与Controller进行通信,这个时候就要用NSNotification和KVO,这个就像广播一样,model发信号,Controller设置监听接收信号,当有数据更新时就会发信号给Controller,Model和View不能直接进行通信,这样会违背MVC设计模式。
①上图中,绿色的箭头表示直接引用
②然后,我们看View是怎么向Controller通信的。对于这个iOS有三种常见模式
1.设置View对应的Action Target。如设置UIButton的Touch up inside的Action Target
2.设置View的Delegate
3.设置View的DataSource
通过以上三种模式,View既能向Controller通信,又无需知道具体的Controller是谁,这样,View 就与Controller解耦了。
除此之外,iOS还提供了Action-Target模式来让controller监听View触发的事件,View又是如何获取数据呢?iOS提供了Data source 的概念,其实也就是Protocol的应用。
2.MVVM设计模式
ViewModel层,就是View和Model层的粘合剂,它是一个放置用户验证逻辑,视图显示逻辑,发起网络请求和其他各种各样的代码的极好的地方。说白了,就是把原来ViewController层的业务逻辑和页面逻辑等剥离出来放到ViewModel层。
View层,就是ViewController层,他的任务就是从ViewModel层获取数据,展示。
3.协议的基本概念和协议中方法默认为什么类型
OC中的协议是一个方法列表,且多少有点相关。他的特点是可以被任何类使用(实现),但他并不是类(这里我们需要注意),自身不会实现这样方法,而是由遵循这个协议的其他类来实现,协议经常用来实现委托对象(委托设计模式)。如果一个类采用了一个协议,那么它必须实现协议中必须要实现的方法,在协议中的方法默认是必须实现的,添加关键字@optional,表明一旦采用该协议,这些"可选"的方法是可以选择不实现的。
4.代理
代理是一种简单而功能强大的设计模式,这种模式用于一个对象“代表”另外一个对象和程序中其他对象进行交互。主对象(这里指的是delegating object)中维护一个代理(delegate)的引用并且在合适的时候向这个代理发送消息。这个消息通知“代理”主对象即将处理或是已经处理完了某一个事件。这个代理可以通过更新自己或是其他对象的UI界面或是其他状态来响应主对象所发送过来的这个事件的消息。或是在某些情况下能返回一个值来影响其他即将发生的事件该如何处理。代理的主要价值是它可以让你容易的定制各种对象的行为。注意这里的代理是个名词,它本身是一个对象,这个对象是专门代表被代理对象来和程序中其他对象打交道的。