10.7 上的 ARC 迁移工具给出错误:删除未使用的“自动释放”消息是不安全的

Posted

技术标签:

【中文标题】10.7 上的 ARC 迁移工具给出错误:删除未使用的“自动释放”消息是不安全的【英文标题】:ARC Migration Tool on 10.7 giving error: it is not safe to remove an unused 'autorelease' message 【发布时间】:2011-09-07 08:45:40 【问题描述】:

我继承了在 10.6 上开发的应用程序,我想在 10.7 上迁移。我想遵守自动引用计数并开始了它。转换助手正在向我发送错误消息:'[rewriter] 删除未使用的 'autorelease' 消息是不安全的;它的接收器可能会立即被销毁'并指向以下方法:

+ (MyClass *)deserializeNode:(xmlNodePtr)cur

    MyClass *newObject = [[MyClass new] autorelease];

    [newObject deserializeAttributesFromNode:cur];
    [newObject deserializeElementsFromNode:cur];

    return newObject;

在旧的保留/发布环境中,这将是非常正常的样式(除了丑陋的“新”消息),但是,ARC 环境不允许这样做。在我看来,这似乎不是很好的解决方案,但我应该像这样使用新指令创建民意调查吗?这完全正确吗?

+ (MyClass *)deserializeNode:(xmlNodePtr)cur

    MyClass *newObject;
    @autorelease
    
       newObject = [MyClass new];

       [newObject deserializeAttributesFromNode:cur];
       [newObject deserializeElementsFromNode:cur];
    

    return newObject;

在返回之前不会释放'newObject'吗?

【问题讨论】:

您找到解决方案了吗? 【参考方案1】:

@autorelease 块只是围绕该部分代码创建一个新的自动释放池。它对该块内代码的实际内存管理没有任何作用。

我认为编译器试图向您指出的问题是,您从一个不遵循返回自动释放对象的方法的命名约定的方法返回一个自动释放对象。

【讨论】:

我已经更改了所有涉及的名称,但消息仍然存在...谢谢您的建议

以上是关于10.7 上的 ARC 迁移工具给出错误:删除未使用的“自动释放”消息是不安全的的主要内容,如果未能解决你的问题,请参考以下文章

为啥迁移到 ARC 后我的应用程序充满了内存泄漏?

GHUnit 在 iOS 项目中转换为 ARC 后给出 allocate_pages() 错误

安装 Arc 并上传 APK 后,如何从 Mac 上的 Launchpad 中删除图标?

ARC

错误:passport.initialize() 中间件未使用 以啥顺序进行调用?

使用 XCode 5.0.2 将问题从非 ARC 迁移到 ARC