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等 ...
随机推荐
- DynamicObject数据包操作
DynamicObject的结构非常简单明了,就是一个字典,类似于一个Dictionary<string, object>,其中的object可能是一个简单值(普通字段),可能是一个复杂值 ...
- Jquery操作radio,checkbox,select表单操作实现代码
一 .Select jQuery获取Select选择的Text和Value: 1. $("#select_id").change(function(){//code...}); / ...
- iOS高仿城觅应用客户端项目(开发思路和代码)
这是一款非常完整的一个ios项目,基本实现了我们常用的一些功能了,而且界面设计个人感觉还是挺不错的,是一个不错的学习ios项目,喜欢的朋友可以参考一下吧. 项目展示,由于没有数据,所以所有的cell显 ...
- button等按钮onclientclick事件失效
如果确定JS没写错 第一种方法: 在JS方法最后return false; 调用方法前加上return 第二种方法: 在JS方法最后event.returnValue=false; 附加:event. ...
- ODBC,实现图片循环写入Oracle数据库
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import jav ...
- 解析XML文档之一:使用SAX解析
使用sax解析xml方法总结 解析的的xml文档格式如下 <?xml version="1.0" encoding = "UTF-8"?> < ...
- EF调用存储过程
var objPar1 = new System.Data.Objects.ObjectParameter("ExeResults",typeof(bool)); var objP ...
- ZigBee profile
每个ZigBee设备都与一个特定模板相关联,可能是公共模板或私有模板.这些模板定义了设备的应用环境.设备类型以及用于设备间通信的簇.采用公共模板,可以确保不同供应商的设备在相同应用领域的互操作 ...
- 使用inotify检测linux目录内文件变化
#include <unistd.h> #include <sys/inotify.h> #include <stdio.h> #include <error ...
- 《RHEL6硬盘的分区和swap分区管理》——硬盘分区的大总结
首先介绍下几个简单的命令: free查看当前系统内存的使用情况 查看分区的使用情况:T类型.H显示大小以G,M 查看系统所有硬盘的分区信息:分区的没分区的都显示出来了 开始分区:为什么要加cu 不加 ...