2012-09-07 58 views
2

我想將舊代碼轉換爲ARC代碼。 然而,我在下面的行得到一個生成錯誤autorelease不允許編譯代碼

[[token retain] autorelease]; 

我得到以下順序3個錯誤:

-'autorelease」是不可用:自動引用計數模式

不可用

- [rewriter]刪除未使用的'autorelease'消息是不安全的;它的接收器可以被立即銷燬

-ARC禁止「自動釋放」

的明確消息發送如果我刪除這一行,然後將代碼編譯正確

+0

http://stackoverflow.com/questions/9865847/is-it-possible-to-combine-non-arc-and-arc-project-code 這應該幫助。 – ratbum

+0

@ratbum這是正確的。我已經完成了這些步驟,但是當我進入「編輯」 - >「重構」 - >「Objective-c ARC」,然後選擇相關文件進行轉換並單擊「檢查」,然後在此特定位置出現錯誤行 – jerry

回答

4

ARC管理你爲你的內存,所以你不不需要調用「autorelease」,「release」,「retain」等。使用ARC,編譯器根據需要保留和釋放對象,因此您不必明確地進行這些調用。如果要手動管理內存禁用ARC,或者可以使用編譯器標誌「-fno-objc-arc」禁用特定類的ARC。

+0

是的,但如果我應該要求Xcode將我的文件轉換爲ARC,是不是有責任將任何引用轉換爲「autorelease」或「release」或「retain」...保留和釋放調用已經存在在文件的其他部分。但它只是這一行,它顯示錯誤 – jerry

+1

@jerry只要刪除在行開頭的無關「[」和「autorelease」;「 –

+0

非常感謝...現在正在編譯。你能向我解釋爲什麼它給出了一個錯誤? – jerry

6

如果這是所有上線,你可能只是將其刪除。該代碼聲稱對該對象的引用,但也表示您不想擔心稍後再發布,但使用ARC則不必擔心。

我猜測Xcode並沒有因爲缺乏上下文而自動消除它。如果它在一個更常見的位置,比如在回覆聲明中,那麼顯然意圖是什麼。當它本身就是一切時,它可能是,但可能不是,更復雜的東西。

+0

謝謝..這個解釋有幫助 – jerry