小编use*_*992的帖子

如何在 Objective C 中动态创建类别?

我正在开发一个 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)

objective-c swizzling ios objc-category method-swizzling

3
推荐指数
1
解决办法
465
查看次数