赞
踩
1、首先创建个继承NSObject的类,.h文件声明两个实例方法test1、test2:
@interface MethodSwizzling : NSObject
- (void)test1;
- (void)test2;
@end
2、在.m文件中实现这两个方法,并交换两个方法的实现:
#import "MethodSwizzling.h" #import <objc/runtime.h> @implementation MethodSwizzling // load方法是应用程序把这个类加载到内存的时候调用,而且只会调用一次,所以在这个方法中实现方法的交换最合适 + (void)load { // 获取test1、test2方法 Method method_test1 = class_getInstanceMethod(self, @selector(test1)); Method method_test2 = class_getInstanceMethod(self, @selector(test2)); // 交换两个方法的实现 method_exchangeImplementations(method_test1, method_test2); } -(void)test1 { NSLog(@"test1"); } -(void)test2 { // 实际调用test1函数 [self test2]; NSLog(@"test2"); }
3、其他地方调用test1方法:
MethodSwizzling *obj = [[MethodSwizzling alloc]init];
[obj test1];
输出结果:
2022-06-27 16:01:47.613741+0800 MethodSwizzling[7284:360599] test1
2022-06-27 16:01:47.613961+0800 MethodSwizzling[7284:360599] test2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。