4

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

但现在程序必须支持 32 位 10.6 OS X 系统,但在 32 位 CPU 上 ARC 不起作用。

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

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

4

2 回答 2

3

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

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

于 2012-11-24T18:29:05.620 回答
2

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

你也可以考虑两者都做。有一个支持不使用 ARC 的 32 位目标和一个支持的 64 位目标。这将是很多工作,但可能不会比转换多多少。它将导致更大的二进制文件(可能是 1.5 倍,具体取决于代码与资源项的比率)。

查看这个 SO question 的第一个答案以获得更好的解释。

于 2012-11-24T12:41:32.067 回答