gpt4 book ai didi

objective-c - 在单独的文件中阐明Objective-C类别

转载 作者:行者123 更新时间:2023-12-03 11:26:12 25 4
gpt4 key购买 nike

我已按类别向引擎中的现有类添加了一些方法。此类别在我的单独文件中声明和实现。然后,我包含这些文件(但所有引擎文件均保持不变,因此引擎中仅包含原始声明)。引擎内置于静态库中,并与我的应用程序链接。当我调用某个类别的方法时,应用程序崩溃,错误为“无法识别的选择器已发送至实例...”。但是,如果我使用原始引擎类在文件中声明类别,则一切正常。

如果类别选择器在单独的文件中声明和实现,为什么不能识别类别选择器?包含文件的顺序重要吗?

最佳答案

这是一个链接器错误,其中在其自己的编译单元中声明的类别方法未正确链接到应用程序中。请在此处查看来自Apple的技术说明:

Building Objective-C static libraries with categories

您必须在应用程序中指定链接器标记-all_load,否则“hacky”技术将是定义一个宏,该宏将定义一个虚拟类和实现,并在每个类别实现中调用该宏:

#define FIX_CATEGORY_LINKER_BUG(name) \
@interface FIX_CATEGORY_LINKER_BUG_##name @end \
@implementation FIX_CATEGORY_LINKER_BUG_##name @end

并在类别实现上方按如下所示使用它:
FIX_CATEGORY_LINKER_BUG(NSStringMyAdditions)

@implementation NSString (MyAdditions)
// ...

关于objective-c - 在单独的文件中阐明Objective-C类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6029921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com