2012-09-24 57 views
4

我對C++或iOS不是很有經驗,所以我只是很好奇,如果iOS引用計數在boost共享指針和NSObject中基本相同?shared_ptr和iOS中的引用計數是否一樣?

+0

我*想*是ARC(iOS版」新引用次數的實現)是不夠嚴謹在語言層面上,以防止或至少難以引入循環引用問題。 boost :: shared_ptr對我所知的循環引用沒有保護。否則,我希望你能預料到兩者的語義和性能非常相似。 –

+1

ARC不會以任何方式阻止循環引用。 – mifki

+0

來自谷歌的一些搜索:「在你自己的項目中使用ARC非常簡單,除了不再調用retain,release和autorelease之外,你可以像往常一樣繼續編程,這基本上就是它的一切。」這意味着兩件事:1)是的,這是某種形式的RAII,就像'shared_ptr'提供的那樣,2)這個平臺的以前的開發很容易出錯。初看起來,從我所收集的內容來看,我更喜歡unique_ptr/shared_ptr機制,因爲它的清晰度([link here])(http://www.raywenderlich.com/5677/beginning-arc-in-ios-5-part-1 ))。 –

回答

2

從我收集的here中,使用ARC非常類似於使用std::shared_ptr(「強」指針)和std::weak_ptr(「弱」指針)。

虐待前者,並避免後者。無論如何,如果可以的話,更喜歡std::unique_ptr

(另外,我有些驚訝,你必須手動釋放指針iOS編程時,在21世紀)。

+0

我個人討厭自動內存管理,並對Obj-C內存管理模型感到滿意。我想完全控制對象的創建和釋放時間,當你不再需要時釋放對象並不困難。 – mifki

+0

不知道所有的C語言衍生語言(其中有很多是實際嗎?),但我們現在討論Obj-C中的引用計數。現在的開發人員甚至懶得思考和編寫簡單的[obj發佈],他們希望一切都自動發生。 – mifki

+1

@mifki:我個人在C++中關於手動內存管理的說法是它不是異常安全的:當你獲取消費釋放時,可能會彈出一個異常消耗,在這種情況下,你想讓資源自動釋放。如果你手動管理錯誤,就像你在C中做的那樣,手動內存管理沒有什麼特別的錯誤。這只是不太方便。 RAII模式也是C++的核心,您可以使用它來管理比內存更多的東西(管理鎖,文件,OpenGL應用程序中的轉換堆棧等) –

0

我對C++並不是非常有經驗,所以對shared_ptr我可能不完全正確,但對我來說他們看起來並不相似。在Obj-C中有兩個選項。手動內存管理 - 您手動增加和減少對象的引用計數,這裏不會出現任何魔法。而新的ARC主要是編譯時功能,而shared_ptr只是運行時實現。

+1

shared_ptr也是編譯時。計數器可能(或可能不)被動態分配,但您所寫的代碼展開爲原子增量/減量。 –

+1

shared_ptr只是一個在其析構函數中減少運行時計數器的對象。在ARC中沒有額外的對象,編譯器在編譯時插入保留/釋放代碼。 – mifki

+1

@mifki:正是在C++編譯器中發生的事情。 – Puppy