iOS runtime实用篇:让你快速上手一个项目
2019独角兽企业重金招聘Python工程师标准>>>
前言:
对于一个大项目而言,最烦恼的就是在众多界面难以找到对应的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:));//需要替换成 能够输出日志的viewWillAppearMethod 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都适用。
原文:http://www.jianshu.com/p/78efcc9575b7
转载于:https://my.oschina.net/u/2345393/blog/760632
iOS runtime实用篇:让你快速上手一个项目相关推荐
- 如何快速上手一个项目
作者:Jim Jin 链接:https://www.zhihu.com/question/38865497/answer/108163546 来源:知乎 著作权归作者所有,转载请联系作者获得授权. 不 ...
- 程序员如何快速上手一个自己不太熟悉的新项目
程序员如何快速上手一个自己不太熟悉的新项目 在知乎上看到的,由作者Jim Jin(奔四老码农,只想做点有意义的事情)写的. 原文出处:http://www.zhihu.com/question/388 ...
- 快速上手Springboot项目(登录注册保姆级教程)
本文章对SpringBoot开发后端项目结构做了简单介绍,并示范了使用SpringBoot+MySQL实现登录的后端功能,与本博客的另一篇文章 Vue 实现登录注册功能(前后端分离完整案例) | Ma ...
- HTML5游戏引擎(二)02-egret引擎之hello world——快速上手-清理项目 程序入口 绘制单色背景 调整屏幕的适配模式 添加文字 响应用户操作-让文字变色
HTML5游戏引擎(二)02-egret引擎之hello world--快速上手-清理项目 & 程序入口 & 绘制单色背景 & 调整屏幕的适配模式 & 添加文字 &am ...
- 如何快速上手新项目?
如何快速上手新项目? 我觉得可以遵循以下几个步骤: 1. 获取项目相关信息 进入一家新公司后,如果遇到不负责任的同事呢,可能直接甩给你项目地址,然后就让你自己研究了.这就好比产品经理直接甩给你一个需求 ...
- *【思路】程序员怎么快速接手一个项目
可能不管新手老手有些程序员,接手一个项目之后都会多少有些迷惘. 以下是本人总结出来的一点小心得,如果错误希望大家给我留言,一起讨论: 最重要的事儿 如果你总是看见代码多就发愁,看见代码脏乱差就诅咒埋怨 ...
- 程序员怎么快速接手一个项目-接手项目指南
目录 维护项目 最重要的事儿 接手方法:不变应万变 维护实用技巧: 项目的常见套路 熟悉项目的套路 vue 项目 快速梳理大型vue项目整体架构技巧方法总结 快速熟悉内部组件模块技巧方法总结 提升工作 ...
- Java如何接手别人项目_程序员必备技能——怎样快速接手一个项目
作为一个程序员,我们很少能从头到尾参与一个新项目的开发.如果你经常开发的是新项目,那你真是太幸福了. 更多的情况是半路进入一个项目组进行开发,或者是有其他同事离职了,之前由他维护的系统转交给你维护. ...
- Maven初探-如何快速入手一个项目
这已是一个工具的时代,而不是一个到处搜集JAR的年代,如果还在为搭建一个项目而到处找依赖,那你就彻底OUT了.下面,跟各位一起重温学习下Maven. 什么是Maven Maven项目对象模型(POM) ...
最新文章
- 针对《评人工智能如何走向新阶段》一文,继续发布国内外的跟贴留言第二部552-556条
- 项目进度管理和项目成本管理作业
- input type=file change事件只触发一次
- 用神经网络测量训练集的半衰期
- 交互式计算机图形学总结:第七章 离散技术
- [链接]C++和Python版本的委托
- NYOJ 201 作业题
- Logger日志级别说明及设置方法、说明 (zhuan)
- php 从第几开始截取,php如何实现截取前几个字符
- BZOJ4278 : [ONTAK2015]Tasowanie
- 一个缺陷管理系统数据库设计和界面设计分析
- 我的世界java种子 要塞,我的世界:稀奇种子,恐龙骨架出现在要塞,你绝对没见过...
- 超级实用且不花哨的js代码大全 (六) ----代码判断,幻灯片播放器,广告效果
- SuperMap BIM+GIS技术白皮书
- SQL字符串首字母大写
- grafana+prometheus监控Springboot服务
- 初步使用计算机教学案列,中小学信息技术教学案例
- java饼图_java 百分比饼图的实现代码
- 自动控制原理(1)-典型环节的传递函数
- Java学习路程1—— 一篇合理的笔记