将一个单独的文件转换为arc

时间:2013-04-10 10:02:39

标签: ios objective-c automatic-ref-counting

我有一个已经过渡到ARC的项目。现在我正在尝试包含来自另一个项目的现有文件,这个文件没有使用ARC,我希望它也符合ARC标准:release-retains,[super dealloc] s从这个文件,快速修复,其他东西“转换为Objective-C ARC ......”的确如此。

问题是我无法使用Edit->Refactor->"Convert to Objective-C ARC..."工具。如果我在“选择要转换的目标”屏幕中仅选择此文件,则会出现“无法转换为Objective-C ARC”消息,因为以下错误:"@synthesize of 'weak'属性仅允许在ARC或GC模式下使用。“但是他们确实已经处于ARC模式!还有很多警告:“方法可能缺少[super dealloc]电话”

如果我在转换时选择除了用-fno-objc-arc标记的所有文件,我只会得到关于弱属性的错误。

当然,我可以手动构建和删除发布保留,但如果有总线(转换工具),为什么要走路...那么我可以自动将单独的文件转换为ARC吗?

更新:我不希望使用-fno-objc-arc标志关闭此文件的ARC,我希望在此文件中使用ARC。

2 个答案:

答案 0 :(得分:1)

如果您坚持让Xcode完成工作,请创建一个新的Xcode项目,并在创建时取消选择“Use ARC”。添加要转换的文件,并将项目转换为ARC。获取修改后的文件并将其导入到其他项目中。

然而,手动转换文件可能更简单。这对于大型文件或整个项目来说并不困难。只需依靠编译器:构建您的应用程序,遍历错误并简单地删除所有保留/释放调用并将任何NSAutoreleasePool转换为@autoreleasepool {}。如果与核心基础类型进行交互,您可能还需要添加__bridge强制转换。

答案 1 :(得分:0)

听起来您必须手动将此文件转换为ARC,而不是依赖于自动转换工具。您需要浏览文件并删除所有版本,保留等等。我之前已经完成了这项工作,虽然需要一段时间,但这并不是太痛苦。依靠来自Xcode的错误消息来指导您需要在代码中修复/删除的内容。 这里有一些我发现可能有用的链接。另请参阅Apple的ARC文档和WWDC 2011会谈(在第二个链接的底部引用)。

Xcode ARC conversion tool issue

http://blog.mugunthkumar.com/articles/migrating-your-code-to-objective-c-arc/