cocoa之高级开发RunTime高级API

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

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

你可能感兴趣的:(开发,cocoa)