斯坦福大学公iOS 7应用开发第一课笔记--MVC模式

来源:互联网 发布:哪个股票软件好用 知乎 编辑:程序博客网 时间:2024/05/25 05:35

斯坦福大学公iOS 7应用开发第一课笔记一


MVC简介

MVC就是model(模式)、view(视图)、controller(控制)的缩写。

  • model:模式考虑的是什么,你的应用程序是什么(而不是你的程序是如何显示的),包括:数据、应用算法逻辑都是独立于UI存在于模式中的。
  • controller: 你的应用程序如何将Model显示给用户(UI逻辑)。
  • view:controller的随从(UI界面),Controller要使用的类。

MVC之间的通信方式

下图是MVC之间的交流方式:(这里用道路标识:白色虚线、双黄线
MVC关系图

  • 控制器通信方式
    1. 控制器到模型的一侧是白色虚线,代表可以直接通过,控制器需要知道模型的一切,还需要有同模型完全通信的能力,按照任何方式使用其公共API。因为控制器的工作就是将模型呈现给用户,使用视图作物其仆从。他需要能够完全部不受限的访问模型(蓝色单箭头线表示)
    2. 类似的,从控制器到视图的通信也是不受限的。因为你控制器需要随意的使唤自己的随从。这里的有个词outlet(出口),因为当我们有个属性从控制器指向视图时我们称为outlet
  • 视图通信方式
    View同控制器之间通过一种盲目的简单的结构化的方式通信。
    视图对象是通用的,所以他不能对控制器知道太多,他们只能通过盲大的方式通信,它们不知道通信对方的类。有以下结构化方式通信:
    1. 目标动作(target action)
      控制器在自身上设置一个目标,它提供一个动作就想一支箭一样给视图,对视图说当你要做什么时,例如你是按钮有人按了你,或者你是滑动条有人滑动了你,发送这个动作给我。通过这种方式通用的按钮和滑动条就能往回同控制器通信,它不知道这是什么样的控制器。它只知道自己发生什么之后将消息发送给目标。
    2. 委托协议
      有时,视图中发生的情况会更加复杂一些,而控制器需要知道发生了什么,同步获知发生了什么。一种考虑方法就是这里写的几个单词:should(应该)、will(将要)、did(已经)。以滚动视图为例,我在滚动,我想要控制器知道用户刚才“已经”滚动过了,或者用户刚按到这里准备滚动,或者当用户触碰到后,滚动视图想知道我“应该”允许滚动吗?所有这些问题滚动视图都没有足够的逻辑去知道答案。于是他将回答这些问题的权利委托给了其他对象,他不知道这一对象的类,他只知道这种对象能回答这些问题,
    3. 数据源委托协议
      视图通过控制器从模型中获取数据的方式。
      视图不拥有数据,它只是展示数据。当它需要数据时通过协议获取。多数时候控制器是视图数据的数据源(不是模型!)。控制器为视图解释和格式化模型信息。
  • 模型通信方式
    1. 模型完全独立于UI,Model和View之间是永远不应该发生对话的。
    2. 模型不能直接与控制器通信,那么当模型中的数据发生更新或者别的变化时,通过Notification和KVO机制与Controller间接通信 。
      类似于广播电台广播机制广播信息,控制器(或者其他模型)调整频率接收他们感兴趣的信息。
0 0
原创粉丝点击