如何以编程方式检测自动引用计数?

时间:2012-05-22 10:58:12

标签: objective-c ios automatic-ref-counting

这可能是一个愚蠢的问题,但我只是想知道。我希望我的代码能够以编程方式检测ARC是否已启用。我怎么做?有没有我可以检查的旗帜?实际上问题是,我写了一个开源库。我在其中使用了releaseretain。如果其他人使用我启用ARC的库文件,我不希望他们得到任何错误。我怎么做到这一点?或者,在使用它之前,我是否可以提供任何工具来编译我的库?

3 个答案:

答案 0 :(得分:18)

#if !__has_feature(objc_arc)
    //Do manual memory management...
#else
    //Usually do nothing...
#endif

这当然是编译时检查,您无法在运行时检查ARC。

另一种方法是为在使用ARC的项目中使用手动内存管理的文件设置-fno-objc-arc编译器标志。

你是否想要打扰这个或者只是在任何地方使用ARC取决于你想要/需要的向后兼容性。支持ARC和MRC的代码很难阅读和维护。

答案 1 :(得分:2)

您没有以编程方式检测它,它基于翻译运行。也就是说,它就像垃圾收集一样 - 这是整个流程,需要所有链接库支持(并在该模式下正确实现)。你可以用ARC编译一些文件,有些文件不用。

但是,您可以detect it at compilation

至于你的库的分布:我不打扰基于翻译的系统,其中ref count ops是有条件启用的。我(个人)只支持一个模型(在您的情况下MRC,直到您选择将其迁移到ARC),然后期望人们链接到库,或者如果他们在他们配置的目标中编译它,则禁用ARC。根据功能的存在有条件地启用/禁用代码会引发严重的错误,特别是当它可能影响到库的9%代码行时。

答案 2 :(得分:1)

不,你不能,如果您的源使用retain-release

,Xcode将无法在ARC项目中编译