2011-06-27 48 views
2

我是Objective-C的新手,我覺得在C++中是合適的。爲什麼保留/釋放而不是新建/刪除?

我的問題是: 爲什麼obj-c的語言設計師應該使用retain/release而不是僅使用new/delete(= alloc/dealloc)?

也許我的大腦適合新/只刪除內存管理,我不明白爲什麼我應該管理引用計數,我想我知道什麼時候對象必須通過C++執行alloc/dealloc。

(是的,我花了4個小時的調試引用計數問題,它是由1號線「釋放」解決)

誰能給我解釋一下什麼是更好的,當我們使用引用計數? (在編程語言方面)我想我可以通過new/delete來管理對象的生命週期,但是我不能以引用計數。

我需要很長的文章,解釋爲什麼引用計數器是有用的,如果你有鏈接。 P:我在WWDC 2011上聽說過編譯時自動引用計數,它真的很棒,例如它可以是引用計數器的使用原因。

+1

我不知道有一個客觀的回答你的問題(雙關語半意)。我認爲那裏沒有一個Obj-C程序員會毫無保留地匆忙參考引用計數的防禦 - 它是一個誠實的皇家PITA。我會在Xcode 4中推薦代碼剖析器(產品 - >配置文件),以幫助您節省修復引用計數問題和過早發佈的時間(雙關語絕對不打算)。祝你好運! – Perception

回答

8

簡短的回答是,它是一種管理對象生命週期的方法,無需像C++那樣要求「所有權」。

在C++中使用new創建對象時,必須知道什麼時候delete該對象。通常這很簡單,但是當一個對象可以被不同的生命週期通過並被許多不同的「所有者」共享時,這可能很困難。

通過引用計數,只要其他對象引用該對象,它就保持活動狀態。當所有其他對象刪除它們的引用時,它將消失。這種方法存在缺陷(保留/釋放和引用循環的調試是最明顯的),但它是全自動垃圾收集的有用替代方案。

Objective-C不是唯一使用引用計數的語言。在C++中,通常使用std::shared_ptr,這是標準的參考智能指針模板。 Windows組件對象模型編程需要它。許多語言在後臺使用自動引用計數作爲垃圾收集策略。

維基百科的文章是開始尋找更多的信息的好去處:http://en.wikipedia.org/wiki/Reference_counting

+0

感謝您的回答,我真的明白什麼是對象分配/釋放的「所有權」。無論如何,有人可以告訴我自動引用計數是如何工作的嗎? (或有用的材料來閱讀。)我真的想象如何在編譯時工作! – moon6pence

+0

ARC上唯一的當前公開信息是在LLVM網站:http://clang.llvm.org/docs/AutomaticReferenceCounting.html。如果您是Apple開發人員計劃的成員,則可以閱讀NDA信息並在開發人員網站上觀看WWDC會話。 –

相關問題