2012-09-07 49 views
2

我想将旧代码转换为ARC代码。 然而,我在下面的行得到一个生成错误autorelease不允许编译代码

[[token retain] autorelease]; 

我得到以下顺序3个错误:

-'autorelease”是不可用:自动引用计数模式

不可用

- [rewriter]删除未使用的'autorelease'消息是不安全的;它的接收器可以被立即销毁

-ARC禁止“自动释放”

的明确消息发送如果我删除这一行,然后将代码编译正确

+0

http://stackoverflow.com/questions/9865847/is-it-possible-to-combine-non-arc-and-arc-project-code 这应该帮助。 – ratbum

+0

@ratbum这是正确的。我已经完成了这些步骤,但是当我进入“编辑” - >“重构” - >“Objective-c ARC”,然后选择相关文件进行转换并单击“检查”,然后在此特定位置出现错误行 – jerry

回答

4

ARC管理你为你的内存,所以你不不需要调用“autorelease”,“release”,“retain”等。使用ARC,编译器根据需要保留和释放对象,因此您不必明确地进行这些调用。如果要手动管理内存禁用ARC,或者可以使用编译器标志“-fno-objc-arc”禁用特定类的ARC。

+0

是的,但如果我应该要求Xcode将我的文件转换为ARC,是不是有责任将任何引用转换为“autorelease”或“release”或“retain”...保留和释放调用已经存在在文件的其他部分。但它只是这一行,它显示错误 – jerry

+1

@jerry只要删除在行开头的无关“[”和“autorelease”;“ –

+0

非常感谢...现在正在编译。你能向我解释为什么它给出了一个错误? – jerry

6

如果这是所有上线,你可能只是将其删除。该代码声称对该对象的引用,但也表示您不想担心稍后再发布,但使用ARC则不必担心。

我猜测Xcode并没有因为缺乏上下文而自动消除它。如果它在一个更常见的位置,比如在回复声明中,那么显然意图是什么。当它本身就是一切时,它可能是,但可能不是,更复杂的东西。

+0

谢谢..这个解释有帮助 – jerry