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实用篇:让你快速上手一个项目相关推荐

  1. 如何快速上手一个项目

    作者:Jim Jin 链接:https://www.zhihu.com/question/38865497/answer/108163546 来源:知乎 著作权归作者所有,转载请联系作者获得授权. 不 ...

  2. 程序员如何快速上手一个自己不太熟悉的新项目

    程序员如何快速上手一个自己不太熟悉的新项目 在知乎上看到的,由作者Jim Jin(奔四老码农,只想做点有意义的事情)写的. 原文出处:http://www.zhihu.com/question/388 ...

  3. 快速上手Springboot项目(登录注册保姆级教程)

    本文章对SpringBoot开发后端项目结构做了简单介绍,并示范了使用SpringBoot+MySQL实现登录的后端功能,与本博客的另一篇文章 Vue 实现登录注册功能(前后端分离完整案例) | Ma ...

  4. HTML5游戏引擎(二)02-egret引擎之hello world——快速上手-清理项目 程序入口 绘制单色背景 调整屏幕的适配模式 添加文字 响应用户操作-让文字变色

    HTML5游戏引擎(二)02-egret引擎之hello world--快速上手-清理项目 & 程序入口 & 绘制单色背景 & 调整屏幕的适配模式 & 添加文字 &am ...

  5. 如何快速上手新项目?

    如何快速上手新项目? 我觉得可以遵循以下几个步骤: 1. 获取项目相关信息 进入一家新公司后,如果遇到不负责任的同事呢,可能直接甩给你项目地址,然后就让你自己研究了.这就好比产品经理直接甩给你一个需求 ...

  6. *【思路】程序员怎么快速接手一个项目

    可能不管新手老手有些程序员,接手一个项目之后都会多少有些迷惘. 以下是本人总结出来的一点小心得,如果错误希望大家给我留言,一起讨论: 最重要的事儿 如果你总是看见代码多就发愁,看见代码脏乱差就诅咒埋怨 ...

  7. 程序员怎么快速接手一个项目-接手项目指南

    目录 维护项目 最重要的事儿 接手方法:不变应万变 维护实用技巧: 项目的常见套路 熟悉项目的套路 vue 项目 快速梳理大型vue项目整体架构技巧方法总结 快速熟悉内部组件模块技巧方法总结 提升工作 ...

  8. Java如何接手别人项目_程序员必备技能——怎样快速接手一个项目

    作为一个程序员,我们很少能从头到尾参与一个新项目的开发.如果你经常开发的是新项目,那你真是太幸福了. 更多的情况是半路进入一个项目组进行开发,或者是有其他同事离职了,之前由他维护的系统转交给你维护. ...

  9. Maven初探-如何快速入手一个项目

    这已是一个工具的时代,而不是一个到处搜集JAR的年代,如果还在为搭建一个项目而到处找依赖,那你就彻底OUT了.下面,跟各位一起重温学习下Maven. 什么是Maven Maven项目对象模型(POM) ...

最新文章

  1. 针对《评人工智能如何走向新阶段》一文,继续发布国内外的跟贴留言第二部552-556条
  2. 项目进度管理和项目成本管理作业
  3. input type=file change事件只触发一次
  4. 用神经网络测量训练集的半衰期
  5. 交互式计算机图形学总结:第七章 离散技术
  6. [链接]C++和Python版本的委托
  7. NYOJ 201 作业题
  8. Logger日志级别说明及设置方法、说明 (zhuan)
  9. php 从第几开始截取,php如何实现截取前几个字符
  10. BZOJ4278 : [ONTAK2015]Tasowanie
  11. 一个缺陷管理系统数据库设计和界面设计分析
  12. 我的世界java种子 要塞,我的世界:稀奇种子,恐龙骨架出现在要塞,你绝对没见过...
  13. 超级实用且不花哨的js代码大全 (六) ----代码判断,幻灯片播放器,广告效果
  14. SuperMap BIM+GIS技术白皮书
  15. SQL字符串首字母大写
  16. grafana+prometheus监控Springboot服务
  17. 初步使用计算机教学案列,中小学信息技术教学案例
  18. java饼图_java 百分比饼图的实现代码
  19. 自动控制原理(1)-典型环节的传递函数
  20. Java学习路程1—— 一篇合理的笔记

热门文章

  1. 十步图解CSS的position
  2. Oracle推出轻量级Java微服务框架Helidon
  3. 乌云爆告之双十一电商的安全警示
  4. CISCO 路由器(2)
  5. 详解zabbix安装部署(Server端篇)
  6. 基于Spark的机器学习实践 (九) - 聚类算法
  7. struct ifconf和struct ifreq,获取网线插入状态
  8. 关于might_sleep的一点说明【转】
  9. 灵玖软件大数据采集技术提高出版行业效率
  10. bash . dot using