2013-06-23 35 views
0

創建了新的iOS項目後,我啓用了ARC並且未打算支持iOS < 5.0。這是否意味着我永遠不需要使用retain/release或者有可能需要使用它們的情況?使用啓用ARC的保留/釋放的情況

有人可以列出這些情況下,如果有任何,謝謝!

+0

幾個基礎類,它們沒有啓用弧,你需要手動釋放它們。 –

回答

0

你永遠不需要使用retain/release/autorelease。啓用ARC後,您不必編寫內存管理代碼,除非您正在使用Core Foundation - ARC不關心Core Foundation對象。但是,您可以讓ARC通過__bridge_transfer轉換(或CFBridgingRelease)爲您釋放CF對象。如果您從Cocoa或Cocoa Touch功能或方法獲得它,則它位於Objective-C-land中,因此由ARC進行管理。你可以通過__bridge_retained cast(或者CFBridgingRetain)將它傳遞給CF世界,之後你必須CF釋放它(或者將它傳回ARC)。是的,只要這些類是在沒有ARC的情況下編譯的(您可以逐個文件地控制這些類;轉到構建階段並將-fno-objc-arc作爲標誌添加到應該在ARC'd項目中編譯的任何文件),那麼編譯後的類可以覆蓋保留/釋放/自動釋放到他們心臟的內容。

+0

-1你應該提到NS保留/釋放以及CF保留/釋放 - 弧不會釋放後者。我會和Valentin Radu的答案一起去,至少我看到 –

+0

。感謝提到這一點。 – Tala

+0

@ Daij-Djan我忘了提及!我已經編輯了我的答案,謝謝你提醒我; – nemesis

4

您應該閱讀Apple的移植指南。有幾個警告。但是,除非直接與Core Foundation合作,或者如果您專門用-fno-objc-arc標記單個文件,並且僅爲該文件自行釋放內存,則無需自行使用retain/release

0

No, you don't need to use them as ARC is enabled.

保留/釋放是使用的方法保留和釋放的引用的對象,分別。它用於管理內存分配和釋放。用戶必須自行管理內存,只有當ARC未啓用或不可用時,如下面的iOS 4.3。

ARC是Automatic Reference Counting。啓用時,SDK本身決定何時釋放對象。用戶只需要分配它。用戶仍然可以管理編號分配。聲明一個對象的strongweak引用。

+2

ARC在iOS 4.3及更高版本上受支持。您需要使用iOS 5.x SDK,但可以爲部署目標選擇iOS 4.3。 4.x不支持的一件事是自動弱參考調零。它也被稱爲ARCLite。 – nemesis