iOS中UIViewController完美瘦身

对于UIViewController瘦身是一个老生常谈的问题,现在也有比较多的架构来实现此效果,比如MVVM等等。不过这次我们是对于传统的MVC架构设计实现完美的瘦身。此方法也完全不妨碍在此基础上使用MVVM等其他方法瘦身。

情景

首先让我们看一下我们要做的界面效果

WechatIMG109.jpeg

 

看着界面不是很难,最上边是二维码扫描;中间输入一些信息,数字1、2、3是按钮点击网络请求然后弹出选择界面供用户选择;最下边历史数据。

其实写下来交互非常的多,接口非常多,业务逻辑也非常的复杂,
传统MVC下来整个.h文件估计至少1500行以上。

瘦身思路

通过上图中的两根红色实现,我们将此界面划分成三部分。则声明四个UIViewController:
分别为:

  • ScanViewController 扫描功能

  • InfoInputViewController输入信息

  • HistoryViewController历史数据

  • MyViewController组装功能
    MyViewController中我们进行组装,并处理一些非业务事件

 

通过此方法,我们第一步已经成功降低了耦合度,而且在项目中还有更大的一个优点就是ScanViewControllerHistoryViewController两个类可以达到复用的效果,其他功能也需要这两个功能,所有的业务逻辑全部在InfoInputViewController

self.myScanVC = [[ScanViewController alloc] init];[self addChildViewController:self.myScanVC];[self.view addSubview:self.myScanVC.view];[self.myScanVC didMoveToParentViewController:self];self.myInforInputVC = [[InfoInputViewController alloc] init];[self addChildViewController:self.myInforInputVC];[self.view addSubview:self.myInforInputVC.view];[self.myInforInputVC didMoveToParentViewController:self];self.myHistoryVC = [[HistoryViewController alloc] init];[self addChildViewController:self.myHistoryVC];[self.view addSubview:self.myHistoryVC.view];[self.myHistoryVC didMoveToParentViewController:self];

由于InfoInputViewController中也有非常多的业务逻辑而且以按钮点击之后开始响应为主。
现在看一下我们的点击事件有多简洁:

- (IBAction)actionClick:(UIButton *)sender {    [self.view endEditing:YES];    [self.actionsContext doActionWithLevel:sender.tag];}

是的没有任何判断,而且我们把所有的业务逻辑均封装在了一个一个的Action中。
下面是我们类结构的设计

6644906-bc298bc89f5a7431.png

 

以上设计思路其实我有单独写过《设计模式之感悟和实践(二)》
具体代码文章中也有。

通过此方法既消除了if…else的判断,同时每个点击时间的业务逻辑也就行了单独的封装。


通过以上两个方法的结合成功了将“UIViewController”瘦的简直不能再瘦了!!作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这是一个我的iOS交流群:869685378,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值