你会为Objective-c ++静态库启用ARC吗?

时间:2013-06-08 22:21:25

标签: ios objective-c++

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

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

2 个答案:

答案 0 :(得分:3)

TL; DR回答:选择您喜欢的任何一个,但最好同时支持两者。如果您想要ARC,请使用它。如果您不想要ARC,请不要使用它。 (从你的问题中推断出,你很可能是一个初学者 - 在这种情况下,我建议你学好手册内存管理,这样你才能知道并理解引用计数的内容和原因,然后您可以转换为稍后在生产代码中使用ARC。)


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

但是,如果您分发了库的源代码(我强烈建议),那么用户需要知道您是否将其设计为在ARC下使用或不使用它。因此,决定一次然后保持一致 - 您可能更喜欢ARC代码以便于使用和编写或非ARC代码以实现向后兼容性。理想的态度是支持ARC和非ARC编译,使用special macro __has_feature(objc_arc)编译时特征检测。

答案 1 :(得分:2)

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