我對C++或iOS不是很有經驗,所以我只是很好奇,如果iOS引用計數在boost共享指針和NSObject中基本相同?shared_ptr和iOS中的引用計數是否一樣?
回答
從我收集的here中,使用ARC非常類似於使用std::shared_ptr
(「強」指針)和std::weak_ptr
(「弱」指針)。
虐待前者,並避免後者。無論如何,如果可以的話,更喜歡std::unique_ptr
。
(另外,我有些驚訝,你必須手動釋放指針iOS編程時,在21世紀)。
我個人討厭自動內存管理,並對Obj-C內存管理模型感到滿意。我想完全控制對象的創建和釋放時間,當你不再需要時釋放對象並不困難。 – mifki
不知道所有的C語言衍生語言(其中有很多是實際嗎?),但我們現在討論Obj-C中的引用計數。現在的開發人員甚至懶得思考和編寫簡單的[obj發佈],他們希望一切都自動發生。 – mifki
@mifki:我個人在C++中關於手動內存管理的說法是它不是異常安全的:當你獲取消費釋放時,可能會彈出一個異常消耗,在這種情況下,你想讓資源自動釋放。如果你手動管理錯誤,就像你在C中做的那樣,手動內存管理沒有什麼特別的錯誤。這只是不太方便。 RAII模式也是C++的核心,您可以使用它來管理比內存更多的東西(管理鎖,文件,OpenGL應用程序中的轉換堆棧等) –
我對C++並不是非常有經驗,所以對shared_ptr我可能不完全正確,但對我來說他們看起來並不相似。在Obj-C中有兩個選項。手動內存管理 - 您手動增加和減少對象的引用計數,這裏不會出現任何魔法。而新的ARC主要是編譯時功能,而shared_ptr只是運行時實現。
- 1. 的shared_ptr和引用計數器
- 2. shared_ptr分配:引用計數的順序
- 3. 嵌入引用計數與提升shared_ptr
- 4. 如何配置shared_ptr引用計數器?
- 5. 一套shared_ptr和設置功能計數
- 6. 做boost :: shared_ptr <T>和boost :: shared_ptr <const T>分享引用計數?
- 7. ReSharper中是否有引用計數?
- 8. Z3_ast引用計數是否在Z3外計數引用?
- 9. 爲什麼boost :: shared_ptr中的引用計數器不穩定?
- 10. 引用xcode中的ios計數
- 11. Swift中的「&&」和「,」是否一樣?
- 12. 是否像引用char數組一樣使用malloc?
- 13. 是否有改變的shared_ptr
- 14. Is @「」和nil是否一樣?
- 15. dict()和add_csrf()是否一樣?
- 16. Alias和CTE是否一樣?
- 17. args和args [..]是否一樣?
- 18. CAutoPtr類是否實現引用計數?
- 19. IUnknown :: QueryInterface()是否增加引用計數?
- 20. 在android和iOS中C++浮點計算是否一致?
- 21. 左值引用是否像左值引用一樣工作?
- 22. 會員對象,引用和shared_ptr的
- 23. 存在shared_ptr的計數
- 24. 引用和數據類型檢查,這些是一樣的嗎?
- 25. iOS是否更改對象的引用?
- 26. std :: tr1 :: shared_ptr是否互斥?
- 27. iOS中是否有像清除一樣的命令?
- 28. 是C++ 11 shared_ptr引用計數(增加/減少)線程安全/原子?
- 29. 推送的src和dst是否一樣?
- 30. Boost shared_ptr解引用費用
我*想*是ARC(iOS版」新引用次數的實現)是不夠嚴謹在語言層面上,以防止或至少難以引入循環引用問題。 boost :: shared_ptr對我所知的循環引用沒有保護。否則,我希望你能預料到兩者的語義和性能非常相似。 –
ARC不會以任何方式阻止循環引用。 – mifki
來自谷歌的一些搜索:「在你自己的項目中使用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 ))。 –