我一直在为 10.6+ OS X 64 位系统开发一个使用 ARC 技术的项目。
但现在程序必须支持 32 位 10.6 OS X 系统,但在 32 位 CPU 上 ARC 不起作用。
如果我只是关闭 ARC 并尝试为 32 位编译它会导致很多错误。
将 ARC 程序转换为手动内存管理程序的最佳方法是什么?
我一直在为 10.6+ OS X 64 位系统开发一个使用 ARC 技术的项目。
但现在程序必须支持 32 位 10.6 OS X 系统,但在 32 位 CPU 上 ARC 不起作用。
如果我只是关闭 ARC 并尝试为 32 位编译它会导致很多错误。
将 ARC 程序转换为手动内存管理程序的最佳方法是什么?
32 位 OS X 10.6 支持垃圾回收。将 ARC 代码转换为 GC 代码相当简单,反之亦然,例如,在某些情况下,ARC 需要适当的桥接转换,而 GC 需要 NSMakeCollectible,您可以将它们封装在宏中。
如果您使用宏,您可以测试 ARC 和 GC 的编译器设置并根据它们有条件地定义宏 - 更改编译器设置并在 ARC 和 GC 之间切换代码。
根据需要浏览您的代码和retain
/release
对象。您将需要查看对象的每个分配,并查看何时需要释放它。您还需要查看应该自动发布的内容以及是否/何时需要创建自己的autorelease pools
和drain
它们。如果您想正确执行,这不是可以自动化的。
你也可以考虑两者都做。有一个支持不使用 ARC 的 32 位目标和一个支持的 64 位目标。这将是很多工作,但可能不会比转换多多少。它将导致更大的二进制文件(可能是 1.5 倍,具体取决于代码与资源项的比率)。
查看这个 SO question 的第一个答案以获得更好的解释。