博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS runtime实用篇:让你快速上手一个项目
阅读量:6327 次
发布时间:2019-06-22

本文共 1806 字,大约阅读时间需要 6 分钟。

hot3.png

前言:

  • 对于一个大项目而言,最烦恼的就是在众多界面难以找到对应的viewController,要改个东西都要花好长的时间去找对应的类。

  • 特别是当你接手一个大项目的时候,对整体的业务逻辑不熟悉,整体的架构体系不熟悉,让你修复某个页面的BUG,估计你找这个页面所对应的viewController都要找好久。

思考

  • 能否有一种方式可以快速让你上手一个大项目?快速找到某个页面所对应的viewController ?

思路

  • 在每一个页面出现的时候,都打印出哪个类即将出现,如下图所示

1594675-6d84eb99316876a7.png

 

解决方案

  • 方案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都适用。

 

 

原文:http://www.jianshu.com/p/78efcc9575b7

转载于:https://my.oschina.net/u/2345393/blog/760632

你可能感兴趣的文章
Go goroutine理解
查看>>
IDE 插件新版本发布,开发效率 “biu” 起来了
查看>>
理解环境变量 JAVA_TOOL_OPTIONS
查看>>
看大牛是如何使用和理解线程池
查看>>
sql server 索引阐述系列八 统计信息
查看>>
c# Request对象(13)
查看>>
USB,蓝牙,以太网,还是WIFI?
查看>>
阿里云服务器更改时区为utc
查看>>
APP测试流程和测试点
查看>>
ansible实战
查看>>
PowerShell 远程管理之启用和执行命令
查看>>
mysql安装错误
查看>>
马斯克:我并不讨厌苹果 Apple Watch还不成熟
查看>>
win系统与linux系统之间文件备份
查看>>
PHP中实现函数重载
查看>>
白宫电子邮件系统疑被黑:第一夫人护照信息被曝光
查看>>
站在物联网风口,传感器产业弯道超车?
查看>>
FreeBSD 11.1 pkg安装vim
查看>>
nagios pnp4nagios yum 安装 配置
查看>>
实现Android应用自动更新
查看>>