怎样拆分View Controller进而实现轻量级的View Controller[UIKit]
參考文章来自objcio站点
为什么要编写轻量级的View Controller??
1、作为iOS项目中最大的文件,ViewControllers中的代码复用率差点儿是最低的
2、重量级的View COntroller加大了測试的复杂度。
所以关注ViewController的瘦身。把业务逻辑、网络请求、Views的代码移到合适的地方。进而提高代码可读性、减少耦合、提高复用、减少測试难度极为重要
一、把DataSource和其它Protocols分离出来
比方uiTableView中的DataSource大多都是对数组做的一些操作,能够把数组操作相关的代码移到单独的类中。
能够使用block或者delegate来设置一个cell。
二、把业务逻辑、网络请求逻辑移动到Model中
业务逻辑类的代码要放到Model对象中。
可是对于不能轻易移动到Model对象中。可是和Model代码相关的。我们能够创建一个Store类
Store被称为服务层或者仓库,主要关心的是数据载入、缓存和设计数据栈
网络请求逻辑也要移动到Model层中,不要在ViewController中做网络请求的逻辑。你应该把网络请求封装到一个类中。这样你的ViewController就能够在之后通过回调函数来请求网络了。
三、把View代码移到View层
不要在ViewController中构建复杂的view层次结构。能够把views封装到UIView的子类中。
对代码的重用和測试都带来非常大的帮助。
补充
1、ViewController主要做的事情是与其它关联的ViewController、Model、View之间进行通信。
2、ViewController和Model对象之间的消息传递能够使用KVO、fetched
results Controller。
3、当一个ViewController须要把某个状态传递给其它多个ViewController时。能够使用代理模式处理。
怎样拆分View Controller进而实现轻量级的View Controller[UIKit]的更多相关文章
- View Controller Programming Guide for iOS---(二)---View Controller Basics
View Controller Basics Apps running on iOS–based devices have a limited amount of screen space for d ...
- 1. 处理静态资源 2. controller如何接受请求得参数 3. 如何把controller得数据保存到view. 4. 在controller如何完成重定向到指定路径 5. controller返回json数据
1. 1. 处理静态资源2. controller如何接受请求得参数3. 如何把controller得数据保存到view.4. 在controller如何完成重定向到指定路径5. controller ...
- SpringMVC从Controller跳转到另一个Controller(转)
http://blog.csdn.net/jackpk/article/details/44117603 [PK亲测] 能正常跳转的写法如下: return "forward:aaaa/bb ...
- (转)Qt Model/View 学习笔记 (一)——Qt Model/View模式简介
Qt Model/View模式简介 Qt 4推出了一组新的item view类,它们使用model/view结构来管理数据与表示层的关系.这种结构带来的 功能上的分离给了开发人员更大的弹性来定制数据项 ...
- Collection View Programming Guide for iOS---(二)----Collection View Basics
Collection View Basics Collection View 基础 To present its content onscreen, a collection view coope ...
- SpringMVC从Controller跳转到另一个Controller
1. 需求背景 需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示. 本来以为挺简单的一件事 ...
- 自定义View(7)官方教程:自定义View(含onMeasure),自定义一个Layout(混合组件),重写一个现有组件
Custom Components In this document The Basic Approach Fully Customized Components Compound Controls ...
- IOS中设置cell的背景view和选中时的背景view 、设置cell最右边的指示器(比如箭头\文本标签)
一.Cell的设置 1.设置cell的背景view和选中时的背景view UIImageView *bg = [[UIImageView alloc] init]; bg.image = [UIIma ...
- Android View框架总结(二)View焦点
请尊重分享成果,转载请注明出处: http://blog.csdn.net/hejjunlin/article/details/52263256 前言:View框架写到第六篇,发现前面第二篇竟然没有, ...
随机推荐
- BZOJ 4543 2016北京集训测试赛(二)Problem B: thr
Solution 这题的解法很妙啊... 考虑这三个点可能的形态: 令它们的重心为距离到这三个点都相同的节点, 则其中两个点分别在重心的两棵子树中, 且到重心的距离相等; 第三个点可能在重心的一棵不同 ...
- PyTorch 实现kmax-pooling
max-pooling有很多种实现方式 (1)kmax-pooling import torch def kmax_pooling(x, dim, k): index = x.topk(k, dim= ...
- 报“ Got minus one from a read call”的错误
在部署应用的时候,有时候应用可以直接启动,但偶尔应用却无法启动,报错信息是: java.sql.SQLRecoverableException: IO Error: Got minus one fro ...
- EasyMvc入门教程-基本控件说明(7)文字块导航
文字块导航其实就是开发winform时候常见的 带Title的Group面板..~!@#¥..好吧,没开发过winform的同学看下图: 实现代码如下: @Html.Q().BlockField(). ...
- 2016.6.20 maven更改repository的位置
默认位置为${userhome}/.m2/repository: 修改位置: 在setting,xml中更改 这个时候再看eclipse的设置,已经自动更改了.因为它是读取setting.xml中的数 ...
- Mysql 性能监控及调优
死锁概念: 两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象 1.监控死锁(innotop): (1) 启用 innodb_status_file 在/etc/my.cnf添加如 ...
- json lib 2.4及其依赖包下载
下载文件地址:https://files.cnblogs.com/files/xiandedanteng/json-lib-2.4%26dependencies_jars.rar 它包括 common ...
- vue 中 this.$router.push() 路由跳转传参 及 参数接收的方法
传递参数的方法:1.Params 由于动态路由也是传递params的,所以在 this.$router.push() 方法中 path不能和params一起使用,否则params将无效.需要用name ...
- 性能指标 - OEE
work center 是指 执行制造作业的资源, 可以是 一个人, 一组人, 一台自动机器, 一组自动机器, 一个半自动机器, 一组半自动机器, 或者是 一个区域组成的生产资源 基本参数 Time ...
- Ant Problem: failed to create task or type foreach 问题
用eclipse导出android时总是会出现有类没有导出的现象,感觉非常麻烦,就用ant些了脚本.在eclipse中运行脚本没问题.可是在命令行下运行会出现 Problem: failed to c ...