在我们的Xcode项目中,有多个目标共享一些公共代码。每个目标只包含实际使用的源代码。所以当我们在共享目标之间使用某些类别方法时,需要确保这些类别实现也包含在所有目标中。如果我们忘记将类别实现包含到某些目标中,Xcode在编译或链接期间不会显示任何警告。手动完成这项工作很麻烦。
是否有自动化的方法来确保将类别实现包括在使用它们的目标中?
是否有自动化的方法来确保将类别实现包括在使用它们的目标中?
NSObject
上的类别组成,但从未实现过。类别不会自动链接到最终的二进制文件。
如果链接器发现定义它们的文件被使用,它们才会被链接(这曾经是常见的 bug 来源)。
您可以在链接器上使用一个特殊的标志:'-all_load' 和 '-ObjC' 在“构建设置/链接/其他链接标志”中。
-ObjC 加载所有实现 Objective-C 类或类别的静态存档库的成员。
另外从这个讨论中得知:
-all_load 和 -force_load 告诉链接器在最终可执行文件中链接整个静态存档库,即使链接器认为存档库的某些部分未使用。
我用来强制链接模块的另一种方法是将 C 函数放入文件中:
void _linkWithNBLogClass(void)
{
NSLog(@"%s", __FUNCTION__);
}
我需要在我的应用程序开始时调用它:
linkWithNBLogClass();
通过控制台的反馈,我可以确定我的模块已经加载并准备好被使用了。
-respondsToSelector:
在运行时更加安全。(如果我理解他的意思正确的话。) - Amin Negm-Awad