是否可以使用AppName -Prefix.pch 文件在除一个之外的所有源文件中导入给定的头文件?
问题:
我已经按照此处描述的方法:https ://stackoverflow.com/a/617559/1062572覆盖了一个 C 函数调用,即 GCDdispatch_async
函数。
现在我需要intercept.h
在所有源文件中导入头文件,为此我尝试使用AppName -Prefix.pch 文件。但是,这也会在我的实现文件中导入头文件intercept.m
。这会导致一个无休止的调用循环,因为我尝试dispatch_async
在那里调用原件。
这是我的头文件intercept.h
:
#ifdef INTERCEPT
#define dispatch_async(queue, block) my_dispatch_async(queue, block)
#endif
这是我的实现文件intercept.m
:
void my_dispatch_async(dispatch_queue_t queue, dispatch_block_t block) {
NSLog(@"\nBlock is enqueued!\n");
dispatch_async(queue, ^{
NSLog(@"\nBlock is dequeued!\n");
block();
NSLog(@"\nBlock has executed!\n");
});
}
这是我的 Prefix.pch 文件:
#ifdef INTERCEPT
#import "Intercept.h"
#endif
如何在我的所有源中导入头文件,实现文件是唯一的例外?我希望无需在每个源文件中手动插入导入语句即可完成。并且无需编写脚本即可。;)
更让我困惑的一件事是:实际上我在编译库(Testing.a)中有实现文件,那么为什么要在其中导入头文件?
更多信息: 我正在编写一个测试框架,等待所有异步任务完成后再检查结果。这就是我重写 dispatch_async 的原因。欢迎任何其他建议。:)
我也注意到了这个答案:https ://stackoverflow.com/a/617606/1062572但是这似乎不适用于 OSX,因此不是我的目标 iOS。
所有这些方法只会覆盖我自己的源代码中的函数调用。实际上我希望它在任何地方都覆盖它。但是对于这个问题,如果它适用于我自己的源代码,我很满意。