我正在开发一个 Objective-C 库项目(“MyLib”)。假设这个库包含在“TestApp”中。现在,“TestApp”还包含另一个名为“Xlib”的库。该 Xlib 有一个类 C1,其中有一个方法 m1。
//C1.h is part of Xlib
@interface C1
- (void) m1;
@end
Run Code Online (Sandbox Code Playgroud)
现在,每次调用 m1 时,MyLib 都应该执行一段代码。我的方法是,如果我在 MyLib 中创建一个类别:
@interface C1 (mycat)
@end
@implementation C1 (mycat)
+ (void) load{
//code to swizzle method in class C1 from: @selector(m1) to: @selector(mycat_m1)
}
- (void) mycat_m1{
/*
insert code that I want to execute
*/
[self mycat_m1]; //calling the original m1 implementation
}
@end
Run Code Online (Sandbox Code Playgroud)
问题: MyLib 没有类 C1。所以我无法构建 MyLib,因为我试图在不存在的类上创建一个类别。因此,编译错误。
所以,然后我尝试将上面的代码包装在里面:
#if defined(__has_include)
#if __has_include("C1.h")
/* …
Run Code Online (Sandbox Code Playgroud)