在Xcode中包含“-ObjC”的原因

时间:2014-04-30 06:46:23

标签: ios xcode build-settings

如果我们包含任何外部库或框架,我们在Xcode中的项目设置的其他链接器标志中包含“-ObjC”,任何人都可以告诉我它是什么原因以及如果我们包含它它会做什么。

先谢谢..

3 个答案:

答案 0 :(得分:3)

Apple's QA1490中解释得非常好。

主要摘录:

  

Objective-C没有为每个函数定义链接器符号(或   在Objective-C)中的方法 - 而是仅生成链接符号   每个班级。

...

  

要解决此问题,目标链接到静态库   必须将-ObjC选项传递给链接器。此标志会导致链接器   加载定义Objective-C的库中的每个目标文件   班级或类别

答案 1 :(得分:1)

类别是此标志的最常见用例(正如Apple的QA1490所解释的那样),但它们并不是需要此标志的唯一原因。

由于Objective-C是一种动态语言,可以使NSClassFromString()成为可能,C链接器的标准行为只包括实际使用的符号(并丢弃所有其他符号)不起作用,因为没有办法找出某些符号是否实际上以某种间接方式使用,例如连接字符串然后调用NSSelectorFromStringNSClassFromString

例如考虑xib / nib文件:它们不参与链接阶段,但它们可以实例化除了这个nib文件之外的任何东西都不引用的库类。如果链接器将这些类丢弃为未使用,则nib无法加载并正常工作。

确保不丢失任何东西的唯一方法是在链接时包含库中的每个Obj-C类,这个标志就是这样。

答案 2 :(得分:0)

-ObjC链接器标志使链接器在定义Objective-C类或类别的库中加载任何对象文件。

Xcode view

Why to use -ObjC linker flag - Apple Documentation?