系统类的方法实现部分替换
Method m1 = class_getInstanceMethod([NSStringclass],@selector(lowercaseString));
Method m2 = class_getInstanceMethod([NSStringclass],@selector(uppercaseString));
method_exchangeImplementations(m1, m2);
log list:
(lldb)po [@"assAAAAss" lowercaseString]
ASSAAAASS
(lldb) po [@"sssKAAAss" uppercaseString]
ssskaaass
自定义类的方法实现部分替换
在这里要说到一个黑马的典型死循环(人称自己++自己)
(void)viewDidLoad {
[self
methodSetImplementation];
[self test];
}
-(void)test{
[self test];
}
如何在不改变源码的基础上干掉死循环
- (void) methodSetImplementation {
Method method = class_getInstanceMethod([ViewController
class],@selector(justLog1));
IMP originalImp = method_getImplementation(method);
Method m1 = class_getInstanceMethod([ViewController
class],@selector(test));
method_setImplementation(m1, originalImp);
}
- (void) justLog1 {
NSLog(@"justLog1");//完美实现实例方法替换
}