2011-09-07 21 views
3

我繼承了在10.6上開發的應用程序,並且我想在10.7上遷移。我想遵守自動引用計數,我開始了。轉換助理髮送給我和錯誤消息:'[重寫器]刪除未使用的'autorelease'消息是不安全的;它的接收器可以被立即銷燬」,並指向下面的方法:10.7上的ARC遷移工具給出錯誤:刪除未使用的「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

您是否找到了解決方案? – Kamchatka

回答

1

@autorelease塊只是在該代碼段周圍創建一個新的自動釋放池。它不會爲該塊內的代碼的實際內存管理做任何事情。

我認爲編譯器試圖向你指出的問題是,你從一個方法返回一個自動釋放對象,該方法不遵循返回自動釋放對象的方法的命名約定。

+0

我改變了所有涉及的名稱,但留言仍然...感謝您的建議 – mbpro

相關問題