ARC转换工具问题:标记的保留/释放和随机解析错误

时间:2012-10-08 06:27:26

标签: ios xcode automatic-ref-counting

我第一次通过Xcode的转换工具(Edit -> Refactor -> Convert to Objective-C ARC...)重新访问一个较旧的项目并转换为ARC,并且我看到了一些事情,我和# 39;我不确定是真正的问题还是红色的鲱鱼。

我按照预期得到了该工具发现阻止其完成的大量事项,但是:

  1. 保留/释放/自动释放的许多(全部?)实例似乎被标记为错误,例如"发布不可用:在自动参考计数模式下不可用"。我真的应该自己摆脱所有这些吗?我认为这是该工具的作用。

  2. 在我的许多课程中,我发现一堆看起来像幻像解析/构建错误的错误与ARC无关。例如。在一个显然没有ARC相关问题的简单类中,我将获得一个未声明的标识符"在一些任意的方法实现,然后一堆"解析错误:期待}"在文件的末尾等等。这些都不是真的 - 项目构建良好,我没有看到任何近因或错误的解决方案。

  3. 有真实的"列表中的问题(需要在代码中明确阐明的预期桥接问题)但是上述种类中存在如此多的随机错误,甚至很难在噪声中找到信号。这对我来说似乎不对。

    我误解了这个工具到底在做什么吗? Apple的博士说:

      

    Xcode提供了一种自动化ARC机械部件的工具   转换(例如删除保留和释放呼叫)并帮助您   修复迁移器无法自动处理的问题

    感谢。

2 个答案:

答案 0 :(得分:0)

  1. 该工具不会为您删除它们,但只需在编译时根据需要添加保留/释放代码。
  2. 当您摆脱旧的引用计数代码时,这些问题可能会消失。
  3. 编辑:进一步说明:

      

    在Xcode 4.2中,除了键入语法检查外,还有新的   Apple LLVM编译器可以减轻手动负担   内存管理到编译器,内省你的代码来决定   何时释放物体。 Apple的文档将ARC描述为   如下:

         

    “自动引用计数(ARC)是一种编译器级别的功能   简化了管理对象生命周期的过程(内存   管理)在Cocoa应用程序中。“

    换句话说,ARC不会从你的代码中“剥离”引用计数,而是在它自己的引擎下进行引用计数。您不必再次键入releaseretaindealloc。 ARC需要做的一件事就是让它自己完成完全的引用计数(没有用户引用计入“妨碍”)。

答案 1 :(得分:0)

花了很长时间才解决,但这两个问题似乎源于我使用的一些自定义宏。我有一个宏,用于我经常使用的release-and-set-to-nil,如下所示:

#define RELEASENIL(x)   [(x) release]; \
                        (x) = nil;

我仍然不确定为什么,但由于某种原因,ARC转换工具没有大步采取这种做法,并且对它进行了扼杀,抛出了发布警告和解析错误。 (与预处理器的一些交互?)当我更改宏以删除释放线时,转换进行得更符合我的预期。

是的,它当然会为您删除消息。 (我正在回答我自己的问题,关于其他人有这个问题的机会。)