• 对iOS中MVC的理解


     总结于斯坦福大学的白头发老头的公开课

    模型-控制器-视图(MVC)是一种将应用中给所有类组织起来的策略

    模型(Model)实际上考虑的是“什么”的问题,即你的程序是什么?

      以纸牌匹配游戏为例子,模型就是设计这个游戏怎么玩,花色匹配,数值匹配得多少分,等逻辑问题。以及这个游戏里的类,如:纸牌,牌堆等类都属于模型里面的东西。以上都是独立于UI且在模型中的。

      至于纸牌如何抽取到屏幕上是控制器的工作

    控制器(Controller)控制模型如何呈现在屏幕上,即弄清如何将这些牌显示在屏幕上,然后将其用动画的形式表现。

    视图(View)是控制器的侍从,是控制器要使用的类,用于构建UI

    这三者之间如何通信?如图 

    Controller要完全知道Model的内容,不受限制地访问Model

    上面说到View是Controller的侍从,所以Controller也能与View通信,如通过outlet;

    相反View也能与Controller通信,但是View是通用的,所以它不能对Controller的类知道得太多,只能以一种“盲”的方式去通信,如关联一个action(点击按钮,移动滑动条),View会发送消息给Controller说自己“被碰了”,它不知道这个Controller是一个什么控制器,纸牌游戏控制器?其他游戏的控制器?这是一种盲的,简单的,结构化的方式,让视图能够与控制器通信。

    还有一种较为复杂的方式,就是通过委托(delegate)协议(will,should,did等方法)来通信,协议是一种同另一对象通信的盲方式。

    还有重要的一点,视图不拥有他们所显示的数据,它通过数据源(data Source)与Controller通信来从Model获得这些数据并显示。

    Controller能与Model通信,相反呢?当Model里的事物变化,如数据,数据库,网络数据库,有人修改了网络的内容,Controller需要知道,Model怎么告诉它呢?

    答案就是通过监听(KVO),Controller通过监听Model,当Model发生变化,它会以广播的方式发送消息给对它有兴趣的Controller,监听它的Controller就得知它发生了什么变化了。

  • 相关阅读:
    元旦快乐,送大家一条水晶龙
    小随笔:利用Shader实现模型爆炸和沙粒化的效果
    小随笔:利用Shader给斯坦福兔子长毛和实现雪地效果
    #UnityTips# 2017.11.14
    微软Tech Summit 2017,微软携手Unity打造MR之夜
    FixedUpdate真的是固定的时间间隔执行吗?聊聊游戏定时器
    第9期Unity User Group Beijing图文报道:《Unity实战经验分享》
    利用GPU实现无尽草地的实时渲染
    大数据学习笔记01-HDFS-集群安装
    Guava学习笔记(三):集合
  • 原文地址:https://www.cnblogs.com/jierism/p/5705668.html
Copyright © 2020-2023  润新知