如果我们包含任何外部库或框架,我们在Xcode中的项目设置的其他链接器标志中包含“-ObjC”,任何人都可以告诉我它是什么原因以及如果我们包含它它会做什么。
先谢谢..
答案 0 :(得分:3)
在Apple's QA1490中解释得非常好。
主要摘录:
Objective-C没有为每个函数定义链接器符号(或 在Objective-C)中的方法 - 而是仅生成链接符号 每个班级。
...
要解决此问题,目标链接到静态库 必须将-ObjC选项传递给链接器。此标志会导致链接器 加载定义Objective-C的库中的每个目标文件 班级或类别
答案 1 :(得分:1)
类别是此标志的最常见用例(正如Apple的QA1490所解释的那样),但它们并不是需要此标志的唯一原因。
由于Objective-C是一种动态语言,可以使NSClassFromString()
成为可能,C链接器的标准行为只包括实际使用的符号(并丢弃所有其他符号)不起作用,因为没有办法找出某些符号是否实际上以某种间接方式使用,例如连接字符串然后调用NSSelectorFromString
或NSClassFromString
。
例如考虑xib / nib文件:它们不参与链接阶段,但它们可以实例化除了这个nib文件之外的任何东西都不引用的库类。如果链接器将这些类丢弃为未使用,则nib无法加载并正常工作。
确保不丢失任何东西的唯一方法是在链接时包含库中的每个Obj-C类,这个标志就是这样。
答案 2 :(得分:0)