解决问题:部分复杂页面的Controller过于庞大,不利于维护与复用;

复杂的页面大多是基于tableview的页面。复杂页面的代码大致可分为两部分(复杂的View布局用Nib实现的话,一般大家都是这么做),一部分是响应逻辑,一部分是页面显示逻辑;

对于基于tableview的页面,响应逻辑即每个Cell中对应的响应逻辑,一般我们是通过Cell的Delegate在Controller中实现,显示逻辑即UITableViewDataSource。

一、响应逻辑简化:

1.将部分单独模块逻辑抽离Controller,使用ChildViewController;

优点:简化了Controller的逻辑,与ViewController使用方法保持一致;

缺点:当整个使用ChildViewController嵌套tableView时作为Cell的内容时,由于复用的单位是整个使用ChildViewController,影响性能,尤其是当使用ChildViewController中的cell过多时会卡顿;

2.以Cell为单位将逻辑放在Cell中,将Cell做为Controller;

优点:类似于使用ChildViewController,简化了Controller的逻辑;大部分使用tableview的页面使用时不用考虑Cell的组装,可直接使用;使用WCCTableviewDynamicCellDelegate,抽象调用,弹性好;

缺点:当同使用ChildViewController;

例:CSPromotionStoreAddressCell

3.MVVM + ReactiveCocoa,采用视图模型;

二、显示逻辑简化:

1.Cell实现自己的显示逻辑,根据Model刷新;

优点:Cell的显示与Controller解耦;逻辑清晰;

例:CSPromotionStoreAddressCell

2.单独实现dataSourcedelegate的Manager;

优点:将tableView的数据逻辑与Controller解耦,TableView所在的Controller不再管理tableView的显示

缺点:指定Cell的delegate时需要Manager获取到Controller,需要避免循环引用;

例:CSPromotionStoreDetailViewController、CSPromotionStoreDetailCellManager

对于非基于tableview的页面,使用ChildViewController或酌情使用基于Cell的Controller方式。

ViewController 优化的更多相关文章

  1. IOS实现自动循环滚动广告--ScrollView的优化和封装

    一.问题分析 在许多App中,我们都会见到循环滚动的视图,比如广告,其实想实现这个功能并不难,用ScrollView就可以轻松完成,但是在制作的过程中还存在几个小问题,如果能够正确的处理好这些小问题, ...

  2. 三种ViewController跳转的异同

    - (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag comple ...

  3. Present ViewController Modally

    一.主要用途 弹出模态ViewController是IOS变成中很有用的一个技术,UIKit提供的一些专门用于模态显示的ViewController,如UIImagePickerController等 ...

  4. iOS App 性能优化总结

    今天简单总结一些clientapp 优化的方案和方向. 我相信开发一个app大部分团队都能够完毕,可是性能久不一样啦,和我们都写一个冒泡算法一样,我相信每一个人写的冒泡算法都不一样,这些区别就带来了性 ...

  5. iOS 程序性能优化

    前言 转载自:http://www.samirchen.com/ios-performance-optimization/ 程序性能优化不应该是一件放在功能完成之后的事,对性能的概念应该从我们一开始写 ...

  6. [iOS Animation]-CALayer 性能优化

    性能优化 代码应该运行的尽量快,而不是更快 - 理查德 在第一和第二部分,我们了解了Core Animation提供的关于绘制和动画的一些特性.Core Animation功能和性能都非常强大,但如果 ...

  7. IOS开发中UITableView(表视图)的滚动优化及自定义Cell

    IOS开发中UITableView(表视图)的滚动优化及自定义Cell IOS 开发中UITableView是非常常用的一个控件,我们平时在手机上看到的联系人列表,微信好友列表等都是通过UITable ...

  8. iOS 如何优化项目

    原文 前言 在项目业务趋于稳定的时候,开发完迭代需求后,我们可能会无所适从,进入一段空白期,但是对于攻城狮来说闲暇不是件好事,所以我们可能总想学点什么,却又没有头绪.这个时候我们就可以考虑完善和优化我 ...

  9. Present ViewController Modally (转)

    一.主要用途 弹出模态ViewController是IOS变成中很有用的一个技术,UIKit提供的一些专门用于模态显示的ViewController,如UIImagePickerController等 ...

随机推荐

  1. VLAN系列

    Write From Yangwj Sunday, March 9, 2014 一. Vlan的识别 1. 交换机端口是访问端口,它就属于某一个Vlan:如果是中继端口,它就可以属于所有Vlan. 2 ...

  2. Windows Phone 8开发环境搭建

    开发Windows Phone需要两个工具:Windows Phone SDK 8.0和Visual Studio集成开发工具.我们购买的Visual Studio Ultimate 2012不包括W ...

  3. PowerDesigner 工具面板 association,inheritance,association link 不可用 解决方法

    PowerDesigner 画E-R 图,关联,继承及关联实体连接不可用. 如图: 解决方法: tools->modeloptions->Notation 改为"E/R+Meri ...

  4. Java一些常见的出错异常处理

    一些平时常见的错误及解决办法,我 是新手,每次遇到的错误都记录了下来. 1. 404错误 description The requested resource (/Struts2_0100_Intro ...

  5. 转:Android studio Gradle

    提高Android Studio中Gradle执行效率 分类: android studio2015-06-26 11:54 2374人阅读 评论(2) 收藏 举报 android studiogra ...

  6. Linux C 程序 进程控制(17)

    进程控制 1.进程概述现代操作系统的特点在于程序的并行执行.Linux是一个多用户多任务的操作系统.ps .pstree 查看进程进程除了进程id外还有一些其他标识信息,可以通过相应的函数获得.// ...

  7. float闭合(清除浮动)和CSS HACK

    一.float 闭合(清除浮动) 将以下代码加入Global CSS 中,给需要闭合的div加上 class="clearfix" 即可,屡试不爽. <style>.c ...

  8. jQuery EasyUI 数据网格 - 启用行内编辑(转自http://www.runoob.com/jeasyui/jeasyui-datagrid-datagrid12.html)

    可编辑的功能是最近添加到数据网格(datagrid)的.它可以使用户添加一个新行到数据网格(datagrid).用户也可以更新一个或多个行.本教程向您展示如何创建一个数据网格(datagrid)和内联 ...

  9. 【Qt】QSettings读写注册表、配置文件【转】

    简述 一般情况下,我们在开发软件过程中,都会缓存一些信息到本地,可以使用轻量级数据库sqlite,也可以操作注册表.读写配置文件. 关于QSettings的使用前面已经介绍过了,比较详细,见“更多参考 ...

  10. hadoop数据流转过程分析

    hadoop:数据流转图(基于hadoop 0.18.3):通过一个最简单的例子来说明hadoop中的数据流转. hadoop:数据流转图(基于hadoop 0.18.3): 这里使用一个例子说明ha ...