2

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

[[token retain] autorelease];

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

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

-[重写器] 删除未使用的“自动释放”消息是不安全的;它的接收器可能会立即被销毁

-ARC 禁止发送“自动释放”的显式消息

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

4

3 回答 3

6

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

我猜 Xcode 并没有因为缺乏上下文而自动摆脱它。如果它位于更常见的位置,例如在 return 语句中,那么意图是什么就很明显了。当它完全独立时,它可能是,但可能不是,更复杂的东西。

于 2012-09-07T23:28:58.563 回答
4

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

于 2012-09-07T23:23:25.660 回答
0

ARC 意味着您不必使用释放、保留或其他讨厌的内存管理工具。ARC 会在您编译应用程序时自动为您添加它们。在这里阅读更多

如果您的旧代码不是删除所有内存管理调用的最佳解决方案,请检查此答案以禁用特定文件的 ARC

于 2012-09-07T23:25:41.657 回答