不多说直接上代码
@interface NSString (YXMethodExchange)
- (NSString *)yx_uppercaseString;
@end
@implementation NSString (YXMethodExchange)
- (NSString *)yx_uppercaseString{
NSLog(@"执行uppercaseString之前");
//这里看似会递归,但实际并不会,因为实际调用的是uppercaseString方法
NSString *uppercaseString = [self yx_uppercaseString];
NSLog(@"执行uppercaseString之后 获取到大写:%@",uppercaseString);
return uppercaseString;
}
@end
调用场景代码
Method up = class_getInstanceMethod([NSString class], @selector(uppercaseString));
Method myUp = class_getInstanceMethod([NSString class], @selector(yx_uppercaseString));
method_exchangeImplementations(up, myUp);
[@"hellow" uppercaseString];
这样就能在指定的方法调用前后加上输出日志。可以很方便的对IOS中没有暴露的方法进行日志打印,方便调试。这就是黑盒调试。