ViewController 优化
解决问题:部分复杂页面的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 优化的更多相关文章
- IOS实现自动循环滚动广告--ScrollView的优化和封装
一.问题分析 在许多App中,我们都会见到循环滚动的视图,比如广告,其实想实现这个功能并不难,用ScrollView就可以轻松完成,但是在制作的过程中还存在几个小问题,如果能够正确的处理好这些小问题, ...
- 三种ViewController跳转的异同
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag comple ...
- Present ViewController Modally
一.主要用途 弹出模态ViewController是IOS变成中很有用的一个技术,UIKit提供的一些专门用于模态显示的ViewController,如UIImagePickerController等 ...
- iOS App 性能优化总结
今天简单总结一些clientapp 优化的方案和方向. 我相信开发一个app大部分团队都能够完毕,可是性能久不一样啦,和我们都写一个冒泡算法一样,我相信每一个人写的冒泡算法都不一样,这些区别就带来了性 ...
- iOS 程序性能优化
前言 转载自:http://www.samirchen.com/ios-performance-optimization/ 程序性能优化不应该是一件放在功能完成之后的事,对性能的概念应该从我们一开始写 ...
- [iOS Animation]-CALayer 性能优化
性能优化 代码应该运行的尽量快,而不是更快 - 理查德 在第一和第二部分,我们了解了Core Animation提供的关于绘制和动画的一些特性.Core Animation功能和性能都非常强大,但如果 ...
- IOS开发中UITableView(表视图)的滚动优化及自定义Cell
IOS开发中UITableView(表视图)的滚动优化及自定义Cell IOS 开发中UITableView是非常常用的一个控件,我们平时在手机上看到的联系人列表,微信好友列表等都是通过UITable ...
- iOS 如何优化项目
原文 前言 在项目业务趋于稳定的时候,开发完迭代需求后,我们可能会无所适从,进入一段空白期,但是对于攻城狮来说闲暇不是件好事,所以我们可能总想学点什么,却又没有头绪.这个时候我们就可以考虑完善和优化我 ...
- Present ViewController Modally (转)
一.主要用途 弹出模态ViewController是IOS变成中很有用的一个技术,UIKit提供的一些专门用于模态显示的ViewController,如UIImagePickerController等 ...
随机推荐
- 如何用C#代码查找某个路径下是否包含某个文件
string path = "f:\\哈哈"; if (Directory.Exists(path)) { MessageBox.Show("存在文件夹") ...
- cocos2dx-lua 批量打包及修改
coco2dx目前大部分开发者肯定是用lua解决问题,问题来了,每次改一下lua配置可能你每次都得运行 cocos luacompile -p android 针对不同的平台,可能会有某些配置会略有不 ...
- mysql数据库用户和权限管理记录
一.MySQL用户的基本说明: 1.1 用户的基本结构MySQL的用户:用户名@主机 ■用户名:16个字符以内■主机:可以是主机名.IP地址.网络地址等主机名:www.111cn.net,localh ...
- Cisco基本命令配置
实验一 路由器的基本命令操作 1 实验目标 ü 熟悉路由器的命令行操作 ü 能够使用命令行帮助 ü 能够查看路由器接口信息 ü 能够产看路由器配置信息 ü 能够配置以太网接口 ü 能够配置广域网接口 ...
- JavaScript学习笔记 - 进阶篇(1)- JS基础语法
前言 JavaScript能做什么? 1.增强页面动态效果(如:下拉菜单.图片轮播.信息滚动等) 2.实现页面与用户之间的实时.动态交互(如:用户注册.登陆验证等) JS进阶篇学习什么? 在JavaS ...
- dropdownlist值改变时调用js
DropDownList的OnSelectedIndexChanged方法是服务器端方法如要用需要设置AutoPostBack选项为true,并且在服务器后台写方法 要调用js方法需要onchange ...
- CP30 ---DataSource连接池的创建过程
1.参看CP30文档quickStart 如下具体创建步骤 public DataSource getDs() throws Exception { //创建连接池对象 ComboPooledData ...
- C89 和 C99的标准比较
本文转载自: C89和C99标准比较 原文转载自: http://blog.programfan.com/article.asp?id=14051 http://blog.csdn.net/xgb ...
- MVC5_学习笔记_1_CodeFirst
MVC5_EF6_1/* GitHub stylesheet for MarkdownPad (http://markdownpad.com) *//* Author: Nicolas Hery - ...
- 【Newtonsoft.Json】Window Phone Json解析开发包
WP从服务器.API交换数据一般都是用JSON格式字符串. 下面介绍用Newtonsoft.Json来处理JSON. 准备 1.到 http://json.codeplex.com/ 下载Newton ...