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

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

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

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

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

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

您没有以编程方式检测它,它基于翻译操作 。 也就是说,它不像垃圾收集 – 它是进程范围的,需要所有链接库支持(并在该模式下正确实现它)。 你可以用ARC编译一些文件,有些没有。

但是,您可以在编译时检测它 。

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

不,你不能,如果您的源使用retain-release,Xcode将无法在ARC项目中编译