运行时动态方法交换
2016-03-20 00:09
260 查看
运行时动态方法交换
当程序加载进内存运行起来的时候,我们依然可以将类/对象的方法实现进行替换掉,这时我们需要用到运行时。主要用到了两个函数。1) Method M1 = class_getInstanceMethod([Person class], @selector(run));
Method M2 = class_getInstanceMethod([Person class], @selector(study));
2)method_exchangeImplementations(M1, M2);
第一步获取实例对象的两个方法,第二步将实例对象的两个方法实现交换。
实现代码:
- (void)viewDidLoad { [super viewDidLoad]; Person* p = [[Person alloc] init]; [p run]; [p study]; NSLog(@"-------------------------------"); Method M1 = class_getInstanceMethod([Person class], @selector(run)); Method M2 = class_getInstanceMethod([Person class], @selector(study)); method_exchangeImplementations(M1, M2); [p run]; [p study]; }
打印结果:
[1681:80992] 我正在跑步!
[1681:80992] 我正在学习!
[1681:80992] —————————-
[1681:80992] 我正在学习!
[1681:80992] 我正在跑步!
上面我们实现的是实例对象的方法交换,类的方法交换只需将第一个函数替换为:
Method M1= class_getClassMethod([Person class],@selector(run));
Method M2= class_getClassMethod([Person class], @selector(study));
即可。
相关文章推荐
- Java Runtime Environment 5.0 Update 12 下载
- php set_magic_quotes_runtime() 函数过时解决方法
- Asp.Net 程序错误Runtime Error原因与解决
- System 类 和 Runtime 类的常用用法介绍
- NET Runtime Optimization Service 1101 错误的解决方法
- 自动释放池的前世今生 ---- 深入解析 autoreleasepool
- 深入解析 ObjC 中方法的结构
- 你真的了解 load 方法么?
- 从源代码看 ObjC 中消息的发送
- IOS高级教程2:反射根据变量的引用获取变量名
- iOS学习之Objective-C 2.0 运行时系统编程
- iOS runtime原理
- runtime 运行时机制 完全解读
- runtime实际应用
- Objective-C 的动态提示和技巧
- Objective-C Associated Objects 的实现原理
- (1)知识准备【利用objective-c的runtime特性,结合FMDB实现一个轻量级的ORM】
- (2)预期+思考【利用objective-c的runtime特性,结合FMDB实现轻量级的ORM】
- (3)实体和结构【利用objective-c的runtime特性,结合FMDB实现轻量级的ORM】
- (4)代码及测试【利用objective-c的runtime特性,结合FMDB实现轻量级的ORM】