runtime实际应用(2)- 快速上手一个项目
2017-11-17 17:35
253 查看
前言
思考
思路
解决方案
方案1
方案2
给UIViewContoller建立一个分类,在分类里进行方法的交换,既保留了原本的方法,又有打印信息
优缺点分析
方案1 适用于一个新项目,从零开始搭建的项目,建立一个基类controller,这种编程思想非常可取。但对于一个已经成型的项目,则方案一行不通,你总不能建议一个基类,让后将所有的controller继承的类都改成基类吧?这工程量太大,太麻烦。
方案2 不论是从零开始搭建的项目,还是已经成型的项目,方案2都适用。
对于一个大项目而言,最烦恼的就是在众多界面难以找到对应的viewController,要改个东西都要花好长的时间去找对应的类。 特别是当你接手一个大项目的时候,对整体的业务逻辑不熟悉,整体的架构体系不熟悉,让你修复某个页面的BUG,估计你找这个页面所对应的viewController都要找好久。
思考
能否有一种方式可以快速让你上手一个大项目?快速找到某个页面所对应的viewController ?
思路
在每一个页面出现的时候,都打印出哪个类即将出现,如下图所示
解决方案
方案1
整个项目中建立一个基类的viewController,然后将项目中所有的viewController都继承于基类的viewController,然后重写基类中的viewWillAppear方法
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; NSString *className = NSStringFromClass([self class]); NSLog(@"%@ will appear", className); }
方案2
给UIViewContoller建立一个分类,在分类里进行方法的交换,既保留了原本的方法,又有打印信息
// // UIViewController+Swizzling.m // CollectionsOfExample // // Created by mac on 16/10/1. // Copyright ? 2016年 chenfanfang. All rights reserved. // #import "UIViewController+Swizzling.h" #import @implementation UIViewController (Swizzling) + (void)load { //我们只有在开发的时候才需要查看哪个viewController将出现 //所以在release模式下就没必要进行方法的交换 #ifdef DEBUG //原本的viewWillAppear方法 Method viewWillAppear = class_getInstanceMethod(self, @selector(viewWillAppear:)); //需要替换成 能够输出日志的viewWillAppear Method logViewWillAppear = class_getInstanceMethod(self, @selector(logViewWillAppear:)); //两方法进行交换 method_exchangeImplementations(viewWillAppear, logViewWillAppear); #endif } - (void)logViewWillAppear:(BOOL)animated { NSString *className = NSStringFromClass([self class]); //在这里,你可以进行过滤操作,指定哪些viewController需要打印,哪些不需要打印 if ([className hasPrefix:@"UI"] == NO) { NSLog(@"%@ will appear",className); } //下面方法的调用,其实是调用viewWillAppear [self logViewWillAppear:animated]; } @end
优缺点分析
方案1 适用于一个新项目,从零开始搭建的项目,建立一个基类controller,这种编程思想非常可取。但对于一个已经成型的项目,则方案一行不通,你总不能建议一个基类,让后将所有的controller继承的类都改成基类吧?这工程量太大,太麻烦。
方案2 不论是从零开始搭建的项目,还是已经成型的项目,方案2都适用。
相关文章推荐
- iOS runtime实用篇:让你快速上手一个项目
- 研究一个实际项目的开发全过程是菜鸟快速上手的关键!
- iOS runtime实用篇:让你快速上手一个项目
- 快速上手一个项目
- 经验浅谈,新人如何快速上手一个新项目
- 对项目的了解几乎为零?如何快速上手一个新项目
- 程序员如何快速上手一个自己不太熟悉的新项目?有什么技巧?
- 如何快速上手一个新项目
- 程序员如何快速上手一个自己不太熟悉的新项目
- 程序员如何快速上手一个自己不太熟悉的新项目?有什么技巧?
- 程序员如何快速上手一个自己不太熟悉的新项目
- 程序员如何快速上手一个自己不太熟悉的新项目
- 如何快速上手一个新项目
- 自己封装的一个iphone上的缓存,支持内存缓存以及磁盘缓存,实际项目已经应用。
- 3 Angular 2 快速上手启动项目Demo
- 数据分析在实际项目上的应用
- 一个简单的IM系统(Demo附源码)-- ESFramework 4.0 快速上手(08)
- [转]如何使用国际开源项目构建一个完整的GIS(地理信息)应用系统
- 实际springMVC项目中自定义异常、spring事务与异常的简单应用
- 转: 如何快速学习一个开源项目源码?