将ARC转换为非ARC

时间:2012-11-24 12:31:08

标签: objective-c xcode cocoa automatic-ref-counting

我一直在开发一个使用ARC技术的项目,用于10.6+ OS X 64位系统。

但是现在程序必须支持32位10.6 OS X系统,但是32位CPU ARC无法正常工作。

如果我只关闭ARC并尝试编译为32位,则会导致很多错误。

使用ARC将程序转换为手动内存管理程序的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

32位OS X 10.6支持垃圾回收。将ARC代码转换为GC代码相当简单,反之亦然,例如,在某些情况下,ARC需要适当的桥接,而GC需要NSMakeCollectible,您可以将它们封装在宏中。

如果您使用宏,您可以测试ARC和GC的编译器设置,并根据它们有条件地定义宏 - 更改编译器设置和ARC&之间的代码切换。 GC

答案 1 :(得分:2)

根据需要浏览您的代码和retain / release个对象。您需要查看对象的每个分配,并查看何时需要释放它。您还需要查看应该自动发布的内容以及是否/何时需要创建自己的autorelease poolsdrain。如果您想要做到这一点,这不是可以自动化的东西。

您也可以考虑两者兼顾。有一个32位目标支持不使用ARC和64位目标。这将是很多工作,但可能不仅仅是转换。它将导致更大的二进制文件(可能是代码与资源项比例的1.5倍)。

查看THIS SO问题的第一个答案,以获得更好的解释。