IOS-MVC的使用
1、Model不允许和Controller,View打交道。也就是Model根本不知道谁会用自己,Model中不能有任何对 Controller和View的引用。正所谓:Don't call me, I will call you.就是给Model设计说的。我们再想想,在一般程序中Model到处被拿去用,它要维护到底谁用真的很难。那你会问:兄弟,那当Model的数据 变了,我怎么通知视图更新呢?这里常用的机制就是广播模式,或者电台模式,或者事件机制都行。在iOS中有两种支持机制:Notification和 KVO(Key-Value Observing)。这两种东西原理差不多,KVO是iOS中的一个核心概念,简单理解就是:关注Model某个数据(Key)的对象可以注册为监听器,一旦Model某个Key的Value发生变化,就会广播给所有的监听器。这和Flex,JavaFX中的绑定都是一个道理。
2、View不允许直接引用Controller和Model,它很专一地被Controller控制来进行数据的显示和接收用户的交互。我们知道 View显示的时候需要数据,我们也知道在View上会产生事件。如果要达到不和Controller,Model直接打交道,就需要机制来支持。在 Objective-C中有Protocol的东西,并且提出Delegate(代理模式)就是来解决UIView想和Controller松耦合互动问 题的。除了这个外,iOS还提供了Action-Target模式来让Controller监听View的事件。那对View如何获得数据,iOS中提了 Data Source的概念,其实也是Protocol的应用。
3、每一次推给用户的一个操作屏幕,最好都是MVC的三者组合,不要出现一组以上的MVC组合
IOS-MVC的使用的更多相关文章
- iOS - MVC 架构模式
1.MVC 从字面意思来理解,MVC 即 Modal View Controller(模型 视图 控制器),是 Xerox PARC 在 20 世纪 80 年代为编程语言 Smalltalk-80 发 ...
- iOS MVC, MVVM
在iOS app里,如果用传统的MVC模式,Model层就是数据,View层就是Storyboard,nib文件或者构建UI的代码,Controller层就是ViewController,负责协调Mo ...
- IOS MVC与MVVM的区别
MVVM是对胖模型进行的拆分,其本质是给控制器减负,就是把一些弱业务放到VM中去处理. MVC是一切设计的基础,所有新的设计模式都是基于MVC的改进.
- ios MVC笔记
MVC:Model 模型 View 视图 Controller 控制器 关系图:
- iOS -- MVC的理解
今天在写项目的时候困惑了一下 我在写一个应用的主界面,其实是很简单的,上面有几个控件,我在想把空间写到viewController里会不会有点冗杂 后来查了一下,发现貌似也不需要分开写,毕竟界面好简单 ...
- IOS MVC
简单的理解: V对M是不能通讯的. C对M通讯:API M对C通讯:Notification,KVO C对V通讯:Outlet V对C通讯:Target-action, Delegate,Dataso ...
- iOS中MVC设计模式
在组织大型项目的代码文件时,我们常用MVC的思想.MVC的概念讲起来非常简单,就和对象(object)一样.但是理解和应用起来却非常困难.今天我们就简单总结一下MVC设计理念. MVC(Model V ...
- 2011斯坦福大学iOS应用开发教程学习笔记(第一课)MVC.and.Introduction.to.Objective-C
blog.csdn.net/totogo2010/article/details/8205810 目录(?)[-] 第一课名称 MVC and Introduction to Objective-C ...
- iOS开发——MVC详解&Swift+OC
MVC 设计模式 这两天认真研究了一下MVC设计模式,在iOS开发中这个算是重点中的重点了,如果对MVC模式不理解或者说不会用,那么你iOS肯定学不好,或者写不出好的东西,当然本人目前也在学习中,不过 ...
- 【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)
一. iOS 项目简介 1. iOS 文件简介 创建一个 HelloWorld 项目, 在这个 IOS 项目中有四个目录 : 如下图; -- HelloWorldTests 目录 : 单元测试相关的类 ...
随机推荐
- 使用LIBSVM工具实现样本分类预测——MatLab
准备工作: https://www.csie.ntu.edu.tw/~cjlin/libsvm/,下载LIBSVM:(LIBSVM工具相较于MATLAB自带的工具:1).支持多分类及回归(‘-s 0’ ...
- HDU 2007
/*杭电ACM ID:2007*/ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int in1, in2 ...
- svn还原到指定版本
svn还原到指定版本 1,选中文件夹,右健,show log 2,选中指定版本,右健,Revert to this revision 3,svn commit 4,ok
- git之远程标签下载(远程分支)
一般我们发布一个新版本到线上服务器时都会在版本库中打一个标签,这样我们可以随时查看这个打标签的版本,就是说标签其实是版本库中一个快照.git的标签与分支类似,区别是分支是可变的而标签是不可变.接下来我 ...
- HDU 4927 Series 1(高精度+杨辉三角)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4927 解题报告:对于n,结果如下: C(0,n-1) *A[n] - C(1,n-1) * A[n-1 ...
- iOS开发——多线程篇——RunLoop
一.简介 1.什么是RunLoop从字面意思看运行循环跑圈 基本作用保持程序的持续运行处理App中的各种事件(比如触摸事件.定时器事件.Selector事件)节省CPU资源,提高程序性能:该做事时做事 ...
- Android学习笔记(一)——新建一个项目
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 1.打开Android Studio时出现以下界面,点击”start a new Android Studio ...
- mysql 将指定列的浮点数转化为整数
mysql 将指定列的浮点数转化为整数: update A set B = cast(B as decimal(10,0)) -- 或者 update A set B = round(B,0) 例 ...
- 如何安装PANABIT?
PANABIT可以帮你轻松的封杀360WIFI.二级路由和移动设备,还可以让员工在上班期间禁止浏览与工作无关的网站,禁止看视频,禁止聊QQ,禁止网购......总之一切你能想到的,它都能帮你实现. P ...
- POJ 2195 Going Home 最小费用最大流 尼玛,心累
D - Going Home Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Subm ...