cocoa之高级开发RunTime高级API

来源:互联网 发布:c语言两条竖线运算 编辑:程序博客网 时间:2024/05/01 05:40

系统类的方法实现部分替换

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 {[selfmethodSetImplementation];[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");//完美实现实例方法替换}
0 0