CJJBlockHook
使 block 交换的实现变得前所未有地简单
此库的诞生原因?原本是为了解决以下三个问题,进而分享实现的思路和解决方案
以下问题都是关于任意
void (^)(void)
形式的block
- 1. 实现以下函数,将
block
的实现修改为NSLog(@"Hello world")
,也就是说,在调用此函数后调用block()
时,不调用原始实现,而是输出 "Hello world
"
void HookBlockToPrintHelloWorld(id block){
}
- 2. 实现以下函数,将
block
的实现修改为打印所有入参并调用原始实现
//
//比如
// void(^block)(int a, NSString *b) = ^(int a, NSString *b){
// NSLog(@"block invoke");
// }
// HookBlockToPrintArguments(block);
// block(123,@"aaa");
// //这里输出"123, aaa"和"block invoke"
//
void HookBlockToPrintArguments(id block){
}
- 3. 实现以下函数,使得调用此函数后,之后创建的任意
block
都能自动实现第二题的功能
void HookEveryBlockToPrintArguments(void){
}