iOS Runtime运行时机制的正确使用姿势
来源:互联网 发布:晨曦软件视频教程 编辑:程序博客网 时间:2024/06/06 20:47
Runtime运行时机制在项目中的实际使用:
相信很多人都有过这样的经历,就是当我们接手一个项目时,若要修复某个BUG或是查看某某功能是如何实现的,特别是大项目,再加上对项目的业务逻辑不熟悉、对项目的设计架构不熟悉的情况下,我们往往感到无从下手,或是需要花一定的时间才能找出对应的类。
这篇博客就是为了需要让人感到蛋疼的问题而写的。
解决方案
给UIViewContoller建立一个分类,利用分类的特性,可以很好很方便地进行管理。类中原有的方法保持执行,还能扩展打印信息。
别忘了import < objc/runtime.h>
//load方法会在类第一次加载的时候被调用,调用的时间比较靠前。当类或分类被添加进运行时机制时就会调用。//适合在这个方法里做方法交换,方法交换应该被保证在程序中只会执行一次。+ (void)load { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ Class selfClass = [self class]; SEL oriSel = @selector(viewWillAppear:); Method oriMethod = class_getInstanceMethod(selfClass, oriSel); //需要替换成能够输出日志的viewWillAppear SEL currSel = @selector(logViewWillAppear:); Method currMethod = class_getInstanceMethod(selfClass, currSel); BOOL addSuccess = class_addMethod(selfClass, oriSel, method_getImplementation(currMethod), method_getTypeEncoding(currMethod) ); if (addSuccess) { class_replaceMethod(selfClass, currSel, method_getImplementation(oriMethod), method_getTypeEncoding(oriMethod)); } else { //利用运行时机制,对方法进行调包交换。 method_exchangeImplementations(oriMethod, currMethod); } });}- (void)logViewWillAppear:(BOOL)animated { NSString *classNameString = NSStringFromClass([self class]); //此处进行过滤打印 if (![classNameString hasPrefix:@"Base"] && ![classNameString hasPrefix:@"Main"]) { NSLog(@"当前控制器为:%@", classNameString); } //实际调用的是viewWillAppear [self logViewWillAppear:animated];}@end
阅读全文
0 0
- iOS Runtime运行时机制的正确使用姿势
- iOS-浅谈runtime运行时机制02-runtime简单使用
- iOS-浅谈runtime运行时机制02-runtime简单使用
- iOS-浅谈runtime运行时机制02-runtime简单使用
- iOS-浅谈runtime运行时机制02-runtime简单使用
- iOS runtime运行时机制
- iOS runtime运行时机制
- iOS runtime 运行时机制
- iOS 运行时机制runTime
- iOS runTime运行时机制
- iOS-浅谈runtime运行时机制01
- iOS-浅谈runtime运行时机制02
- #转#iOS-浅谈runtime运行时机制
- iOS-浅谈runtime运行时机制01
- iOS 运行时机制(runtime)
- 浅谈iOS运行时机制runtime(1)
- 浅谈iOS运行时机制runtime(2)
- iOS开发之Runtime运行时机制
- 音视频:AVAudioPlayer:中断处理
- 算法作业19
- 另类的电脑弹窗,无法查杀,也找不出!
- ARC和MRC下的block的内存分布详解
- Hibernate一对一关联映射(注解)
- iOS Runtime运行时机制的正确使用姿势
- 十进制和十六进制转换
- SQL 注入、XSS 攻击、CSRF 攻击
- 算法:计算n!
- Android 版本更新框架——XVersionUpdate
- 多边形游戏问题
- 利用mybatis-generator自动生成代码
- C语言中extern的用法
- oracle员工表和部门表基本操作