0

我想在我的 Objective-C 应用程序中使用 C++ 库,为此,我有一个中间静态库,它将使用 Objective-C++(.mm 文件而不是 .m)。反过来,我的 iOS 应用程序将使用静态库。

在 Objective-C++ 库中,启用 ARC 是否安全,或者我应该让我的 Objective-C 应用程序处理它?

4

2 回答 2

2

TL;DR 回答:选择您喜欢的任何一个,但最好同时支持两者。如果您想要 ARC,请使用它。如果您不想要 ARC,请不要使用它。(从您的问题推断,您很可能是初学者 - 在这种情况下,我建议您好好学习手动内存管理,以便您了解并理解引用计数发生了什么以及为什么发生,然后您可以过渡到使用 ARC稍后在生产代码中。)


如果您分发二进制静态库文件本身( MyLibrary.a),那么它没有任何区别。正如@nil 已经指出的那样:ARC 是一种编译时retain技术(以一种过于简化的方式解释,它只是插入对和release的调用autorelease。它对链接时间没有影响,更不用说运行时了)。因此,一旦代码编译完成,没有人可以判断您是否使用了 ARC,因此您的库的用户也无需担心这一点。

但是,如果您分发库的源代码(我强烈鼓励这样做),那么用户需要知道您是否将其设计为在 ARC 下使用或不使用它。所以决定一次,然后保持一致——你可能更喜欢使用 ARC 代码以便于使用和编写,或者使用非 ARC 代码来实现向后兼容性。理想的态度是支持 ARC 和非 ARC 编译,使用带有特殊宏__has_feature(objc_arc)的编译时特征检测。

于 2013-06-08T22:36:32.257 回答
2

ARC 是一个编译时特性,因此如果库设计为使用 ARC,则需要在构建库时启用它。否则,您可能会遇到泄漏。无论是 Obj-C++ 还是 Obj-C 在这里都没有真正的区别。

于 2013-06-08T22:23:41.780 回答