參考文章来自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]的更多相关文章

  1. 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 ...

  2. 1. 处理静态资源 2. controller如何接受请求得参数 3. 如何把controller得数据保存到view. 4. 在controller如何完成重定向到指定路径 5. controller返回json数据

    1. 1. 处理静态资源2. controller如何接受请求得参数3. 如何把controller得数据保存到view.4. 在controller如何完成重定向到指定路径5. controller ...

  3. SpringMVC从Controller跳转到另一个Controller(转)

    http://blog.csdn.net/jackpk/article/details/44117603 [PK亲测] 能正常跳转的写法如下: return "forward:aaaa/bb ...

  4. (转)Qt Model/View 学习笔记 (一)——Qt Model/View模式简介

    Qt Model/View模式简介 Qt 4推出了一组新的item view类,它们使用model/view结构来管理数据与表示层的关系.这种结构带来的 功能上的分离给了开发人员更大的弹性来定制数据项 ...

  5. Collection View Programming Guide for iOS---(二)----Collection View Basics

      Collection View Basics Collection View 基础 To present its content onscreen, a collection view coope ...

  6. SpringMVC从Controller跳转到另一个Controller

    1. 需求背景   需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示. 本来以为挺简单的一件事 ...

  7. 自定义View(7)官方教程:自定义View(含onMeasure),自定义一个Layout(混合组件),重写一个现有组件

    Custom Components In this document The Basic Approach Fully Customized Components Compound Controls ...

  8. IOS中设置cell的背景view和选中时的背景view 、设置cell最右边的指示器(比如箭头\文本标签)

    一.Cell的设置 1.设置cell的背景view和选中时的背景view UIImageView *bg = [[UIImageView alloc] init]; bg.image = [UIIma ...

  9. Android View框架总结(二)View焦点

    请尊重分享成果,转载请注明出处: http://blog.csdn.net/hejjunlin/article/details/52263256 前言:View框架写到第六篇,发现前面第二篇竟然没有, ...

随机推荐

  1. 3)nginx的启动与停止、重启,linux配置对外端口

    [启动] 启动代码格式:nginx安装目录地址 -c nginx配置文件地址例如: [root@LinuxServer sbin]# /usr/local/nginx/sbin/nginx -c /u ...

  2. Windows Server 2008 IE 无法调整安全级别

    开始”/“程序”/“管理工具”/“服务器管理器”命令,在弹出的服务器管理器窗口中,找到“安全信息”设置项,单击其中的“配置IE ESC”选项,打开如下图所示的IE增强安全配置窗口.

  3. WinForm版聊天室复习Socket通信

    聊天室:服务器端-------------客户端 最终演示展示图: 一. 服务器端 对服务端为了让主窗体后台不处理具体业务逻辑,因此对服务端进行了封装,专门用来处理某个客户端通信的过程. 而由于通信管 ...

  4. python核心编程学习(第三版)之网络编程

    套接字 套接字是计算机网络数据结构.在任何类型的通信开始之前,网络应用程序必须创建套接字. 有两种类型的套接字,基于文件和面向网络的. unix套接字是第一个家族,AF_UNIX代表地址家族,缩写AF ...

  5. nodejs session 设计

    会话管理 { //保存会话 _data : {}, /** 会话基本操作 ***/ //查找会话 getSession : function(id){}, //创建会话 createSession : ...

  6. C#数据之DataTable

    C#创建DataTable的几种方式 第一种方式:直接添加数据对象 DataTable table = new DataTable(); table.Columns.Add("strName ...

  7. AAuto如何设置定时器

    在设计视图中(一定要有个Form)点击左下角的功能组件   点击定时器即可切换到代码视图,并添加如下代码.其中我每隔一秒改变一下winform.static2.text的文本值      

  8. DataTable行处理

    DataTable dt=new DataTable(); 新增行: DataRow addDR= mydatatable.NewRow();addDR["ID"] = " ...

  9. Build Your Hexo Blog (On Github)

    超简单,比jekyll好多了! 看个Demo http://kevinjmh.github.io/ 了解Hexo Hexo是一个由Node.js驱动的,简单.快速.强大的Blog框架.可以快速的生成静 ...

  10. cnBlogs windows LIves Writes 安装

    1. 官网下载安装 http://group.cnblogs.com/topic/8550.html   参照这个网址下载并安装软件,顺利的话,就万事大吉.但是,如果报错的话,比如我出现的报错的代码是 ...