2012-11-24 87 views
3

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

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

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

将程序转换为ARC以便通过手动内存管理进行编程的最佳方法是什么?

回答

2

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

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

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

+0

您不需要使用'NSAutoreleasePool'类;相反,使用'@ autoreleasepool'指令:它将在OS X的旧版本上像NSAutoreleasePool一样运行,并且在新版本上会快一点。 – MaddTheSane

3

32位OS X 10.6支持垃圾收集。将ARC代码转换成GC代码是相当简单的,反之亦然,例如,有几种情况需要ARC进行适当的桥式转换,而GC需要NSMakeCollectible,并且可以将这些转换为宏。

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

+0

避免使用Cocoa的垃圾收集:它存在缺陷并且已被弃用。 – MaddTheSane

+0

@MaddTheSane - 垃圾收集可能在当前系统上被弃用,但它在32位OS X 10.6上不被追溯使用,这是OP明确要求的。 – CRD