文档章节

M-V-VM在iOS开发中的应用

 泊竹
发布于 2015/03/06 17:58
字数 526
阅读 669
收藏 7

        项目开发中,经常遇到一个界面很复杂,各种控件各种View,相互之间有复杂的互动逻辑,各组件的数据有时还需要专门的服务器接口支持

       MVC模式会把这些逻辑都放到C里面实现,使得某个ViewController非常庞大复杂。不管是改动功能还是debug,都很费时。

       M-V-VM模式引入MVC中,可以改善这种情况。结构如下:

解释

       将一个界面中的各种元素分成几个相对独立的组件,每个组件创建一个对应的ViewModelViewController创建并管理这些ViewModel之间的相互通讯互动

       ViewModel管理View的刷新和用户操作事件。如果用户的响应需要其他组件进行互动,则通过delegate向上传递给ViewController。由ViewController进行ViewModel之间的通讯路由

       View提供一个用户刷新显示的API,内部元素的具体刷新实现外部不可见。

除了刷新显示,View还提供用户操作的响应,通过delegate通知ViewModel处理。

       DataModelViewModel管理。它具有获取View的数据、保存数据到某个数据结构的功能。一般会创建一个公共属性保存获取到的新数据。ViewModel对这个属性建立KVO监控。

       我们一般会使用异步方式从网络下载新数据,当新数据下载成功,经过解析后存储到公共属性里。这时,KVO方法被激活执行,ViewModel读取属性的值传递给View,让它刷新显示

       DataModel提供一个类似reloadData的更新数据方法,由ViewModel调用。ViewModel只要调用了这个方法,一切就开始自动运行

       DataModel仅对ViewModel可见。这样,这三者形成了一个相对独立的生态圈,外部仅能看见ViewModel。由ViewModel提供对外的API,比如刷新数据,提交跨ViewModel通讯申请等

Demo项目在这里下载地址

© 著作权归作者所有

共有 人打赏支持
粉丝 90
博文 67
码字总数 13285
作品 0
徐汇
“沙盒之内”项目展示运行在iOS之上的“Hello World”Android应用

"In the Box" Project Showcases "Hello World" Android App Running on iOS “沙盒之内”项目展示运行在iOS之上的“Hello World”Android应用 posted by Hadrien Grasland on Thu 2nd Jun ......

xyxzfj
2011/06/02
0
0
Mac下安装ionic和cordova,并生成iOS项目

为了开发HTML5,除了最新使用React Native等之外,目前首选的为稳定的ionic+Angularjs来开发iOS和android. Ionic(ionicframework一款接近原生的HTML5移动App开发框架 会html css js就可以开发...

Michaelyn
2017/10/23
0
0
10个优秀Objective-C和iOS开发在线视频教程

如果你自己开发iOS应用,你肯定会发现网上有很多资源。学习编程的一个最好的方法就是自己写代码,而开始写代码的最快的方式就是看其他人怎么写。我们从海量视频和学习网站中整理出了我们认为...

mingxun
2014/05/09
0
0
转:一套代码iOS、Android两端运行,Google Flutter意味着什么?

原文:https://www.toutiao.com/a6569388465538990600/?ttfrom=weixin&utmcampaign=clientshare×tamp=1529580533&app=newsarticle&utmsource=weixin&iid=35476649324&utmmedium=toutiao......

鸿蒙无上至尊
06/22
0
0
IOS学习笔记——Objective-c基础(一)

最近自学ios,ios的支持语言是Objective-c,所以要学习ios就需要先学习Objective-c语言。当掌握了Objective-c的基础知识之后,我们就可以入手学习iOS开发做出一些自己的应用。 我现在还是...

丛林迷雾
2012/12/30
0
1

没有更多内容

加载失败,请刷新页面

加载更多

django 2 urlpatterns 中正则匹配路由

django 2 urlpatterns 中正则匹配路由: 在项目的urls.py中导入re_path:

MichaelShu
30分钟前
2
0
Spring MVC 到 Spring Boot 的简化之路

背景 从Servlet技术到Spring和Spring MVC,开发Web应用变得越来越简捷。但是Spring和Spring MVC的众多配置有时却让人望而却步,相信有过Spring MVC开发经验的朋友能深刻体会到这一痛苦。因为...

别打我会飞
36分钟前
1
0
python做文本内容指定区域字符串替换

需求: 因为公司项目需要做SEO优化,所以对项目中的各种长连接做优化,比如本文中提到的精简路径;之前已经批量吧文本的路径名字等做过修改,这里不再赘述;这里的问题是外部的路径修改了,文...

坦途abc
今天
4
0
MySQL 关键字模糊匹配,并按照匹配度排序

MySQL 关键字模糊匹配,并按照匹配度排序。 方式一、按照关键字搜索,然后根据关键字所占比例排序 SELECTdrug_name,pinyinFROMtbl_drugWHEREpinyin LIKE '%AM%'ORDER BY...

yh32
今天
5
0
虚拟机学习之一:java内存区域与内存溢出异常

1.运行时数据区域 java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途和创建、销毁时间,有的区域伴随虚拟机进程的启动而存在,有些区...

贾峰uk
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部