自动释放不允许编译代码

时间:2012-09-07 23:20:08

标签: objective-c ios

我正在尝试将旧代码转换为ARC代码。 但是,我在以下行获得了构建错误

[[token retain] autorelease];

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

- 'autorelease'不可用:在自动参考计数模式下不可用

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

-ARC禁止'autorelease'的显式消息发送

如果我删除此特定行,则代码正确编译

3 个答案:

答案 0 :(得分:6)

如果这就是线上的所有内容,您可以将其删除。该代码声称对该对象的引用,但也表示您不想担心以后发布,但使用ARC,您不必担心它。

我猜测Xcode没有因为缺乏上下文而自动摆脱它。如果它处于一个更常见的位置,例如在一个返回声明中,那么意图是明显的。当它完全是它本身时,它可能是,但可能不是,更复杂的东西。

答案 1 :(得分:4)

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

答案 2 :(得分:0)

ARC意味着您不必使用发布,保留或其他讨厌的内存管理事物。 ARC在编译应用程序时会自动为您添加所有内容。 Read more here

如果您的旧代码不适合删除所有内存管理调用,那么check this answer to disable ARC for particular files