Ios ARC转换工具问题:标记保留/释放和随机分析错误
我第一次通过Xcode的转换工具(Ios ARC转换工具问题:标记保留/释放和随机分析错误,ios,xcode,automatic-ref-counting,Ios,Xcode,Automatic Ref Counting,我第一次通过Xcode的转换工具(Edit->Refactor->Convert to Objective-C ARC…)重新访问一个较老的项目并转换为ARC,我看到了一些我不确定的事情,它们是真的问题还是有点麻烦 正如预期的那样,我得到了一大串工具发现的阻止它完成的事情,但是: 许多(全部?)保留/释放/自动释放实例似乎被标记为错误,例如“释放不可用:在自动引用计数模式下不可用”。我真的应该自己把这些都处理掉吗?我想这就是工具的作用 在我的许多类中,我看到了一系列错误,这些错误看起来像幻影解析
Edit->Refactor->Convert to Objective-C ARC…
)重新访问一个较老的项目并转换为ARC,我看到了一些我不确定的事情,它们是真的问题还是有点麻烦
正如预期的那样,我得到了一大串工具发现的阻止它完成的事情,但是:
换句话说,ARC不会从代码中“剥离”引用计数,而是在引擎盖下自己进行。您不再需要再次键入
release
或retain
或dealloc
。ARC需要做的一件事是完全独立地进行引用计数(没有用户引用计数来“碍事”)。花了很长时间来解决,但这两个问题似乎都源于我使用的一些自定义宏。我有一个用于发布的宏,设置为nil,我经常使用它,如下所示:
#define RELEASENIL(x) [(x) release]; \
(x) = nil;
我仍然不知道为什么,但出于某种原因,ARC转换工具没有大踏步地处理这个问题,并且被它卡住了,抛出了发布警告和解析错误。(与预处理器进行了一些交互?)当我更改宏以删除发布行时,转换过程更加符合我的预期
是的,它当然会为您删除消息。(我在回答我自己的问题,希望其他人不会有这个问题。)那么,如果不排除无关调用,该工具实际上做了什么?Re#2,这是否意味着在进行转换时我应该忽略这些错误?更新了我的答案并作了进一步解释。这描述了ARC本身在运行时的工作方式。我正在寻找有关Xcode中ARC重构/转换工具的工作原理及其输出含义的信息。转换工具(上次我使用它时)不会从项目中删除任何代码,而只是启用更新的、启用ARC的编译器。您必须自己删除旧的引用计数代码。迁移工具绝对会从代码中删除release/retain。