我继承了在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'吗?
答案 0 :(得分:1)
@autorelease
块只是围绕该部分代码创建一个新的自动释放池。它对该块内部代码的实际内存管理没有任何作用。
我认为编译器试图向您指出的问题是,您从一个方法返回一个自动释放的对象,该方法不遵循返回自动释放对象的方法的命名约定。