Ios 苹果公司';如果-ObjC链接器标志上的错误已修复,那么在使用静态库时是否需要将-all_load或-force_load添加到我的项目中?

Ios 苹果公司';如果-ObjC链接器标志上的错误已修复,那么在使用静态库时是否需要将-all_load或-force_load添加到我的项目中?,ios,iphone,xcode,Ios,Iphone,Xcode,演示了该bug。它说,对于64位和iPhone操作系统应用程序,存在一个链接器错误,阻止-ObjC从只包含类别而不包含类的静态库加载对象文件。解决方法是使用-all_load或-force_load标志 事实上,我不知道这个bug是否已经修复,我也找不到任何关于它的信息。有没有人给我看一些苹果关于修正错误的参考资料 如果这个bug真的被修复了,这是否意味着当我的静态库只包含类别而不包含类时,我不需要将-all_加载(或-force_加载)添加到我的项目中 感谢您的回答。这在Xcode 4中得到了

演示了该bug。它说,对于64位和iPhone操作系统应用程序,存在一个链接器错误,阻止-ObjC从只包含类别而不包含类的静态库加载对象文件。解决方法是使用-all_load或-force_load标志

事实上,我不知道这个bug是否已经修复,我也找不到任何关于它的信息。有没有人给我看一些苹果关于修正错误的参考资料

如果这个bug真的被修复了,这是否意味着当我的静态库只包含类别而不包含类时,我不需要将-all_加载(或-force_加载)添加到我的项目中


感谢您的回答。

这在Xcode 4中得到了修复,在Xcode 5中也得到了肯定。也就是说,我发布了一个静态库,它只在自己的类(以及单独的文件)上使用类别,使用它的应用程序将在没有标记的情况下崩溃。问我如何知道这一点(一个客户忘记添加标志!)

“没有类的类别”意味着您有一个文件-一个.m文件实现-其中唯一的代码是一个或多个类别。反之则是一个类实现,然后是该类的一个类别。什么是模糊的是一个类实现后面或前面有一个类别到一个不同的类-我猜这将工作,但你必须测试它

你可以通过实验来观察它的实际效果!实际上,我将其添加到我的静态库中,以便在-ObjC标志丢失时发出警告(如果开发库,也可以这样做):

创建全局变量:

BOOL categoriesLoaded;
在您的一个类别中,添加以下内容(您可以将其移动到实验中)


然后在一个主库类的方法中,一个肯定会在早期被调用的方法,测试是否设置了标志。如果不是,则未设置
-ObjC
标志。然后可以采取一些严肃的措施,比如记录一些事情并调用exit()。如果您的类别没有加载,您将以某种奇怪的方式崩溃,某些代码对任何人来说都毫无意义。

为什么不测试它?@BradAllred我已经测试过了,我认为它是固定的,但我不知道是否应该使用-all_load标志,我不想用权威文档来确定bug是否已修复。好了,大多数静态库现在只使用了
-ObjC
标志。@BryanChen谢谢你的回答,我认为苹果已经修复了这个bug,但没有提到它。@BryanChen要澄清一个可能的误解:必须将链接器标志
-ObjC
添加到链接静态库的目标中。所以,将其添加到静态库中完全没有效果。非常感谢!现在我知道“categories and no class”意味着一个文件只有categories而没有类实现。
@implementation SomeClass (SomeName)

+ (void)load
{
    categoriesLoaded = YES;
}