我正在尝试将旧代码转换为ARC代码。 但是,我在以下行获得了构建错误
[[token retain] autorelease];
我按以下顺序得到3个错误:
- 'autorelease'不可用:在自动参考计数模式下不可用
- [rewriter]删除未使用的'autorelease'消息是不安全的;它的接收器可能会被立即销毁
-ARC禁止'autorelease'的显式消息发送
如果我删除此特定行,则代码正确编译
答案 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