隨着iOS的最新版本Apple爲Objective-C實現了自動引用計數,但我不理解爲作品。自動引用計數是否作爲垃圾收集器工作?
回答
自動引用計數插入retain
和release
郵件到你的代碼在編譯時,按照正常慣例。所以就像你自己手動進行內存管理一樣,除了編譯器足夠聰明以便能夠爲你編寫這些內容,並且不太可能犯錯。
因此,它不是垃圾收集,它更像是一個(非常簡單)的靜態分析形式。根據以下Catfish_Man提出的警告,您仍然獲得壓倒性的確定性內存管理,並且運行時成本的整體變化很小。
運行時成本的變化並不準確。編譯器必須比人類更關注對象的生命週期,這通常會導致大約20%的重新計數流失。另一方面,在許多情況下,ARC有一些巧妙的技巧來避免自動釋放,這可以降低內存使用並提高性能。無論是贏得還是失敗,都取決於問題的確切代碼。 –
好點。我淡化了我的回答,並明確提到了你的評論。 – Tommy
@Tommy:你說「100%確定性」,但文檔說「允許ARC以可能改變總體計算曆史的方式重新排序和消除操作」。 http://clang.llvm.org/docs/AutomaticReferenceCounting.html#optimization –
自動引用計數實現了Objective-C對象和塊的自動內存管理,使程序員不必明確插入保留和釋放。 它不提供循環收集器;用戶必須明確地管理生命期。
閱讀本規範 - Automatic Reference Counting
- 1. Java中的垃圾收集器是否自動工作?
- 2. 網絡工作者是否有自己的垃圾收集器?
- 3. 垃圾收集是否與Go編譯器(gc)一起工作?
- 4. Java - 自動垃圾收集如何爲LinkedList工作?
- 5. 自動垃圾收集
- 6. 垃圾收集器如何確定對象是否是垃圾?
- 7. Redux垃圾收集如何工作?
- 8. 垃圾收集機制如何工作?
- 9. 垃圾收集的工作環境?
- 10. 背景工作者和垃圾收集?
- 11. 垃圾收集器是否有配置?
- 12. 垃圾收集和引用計數如何在Xamarin中一起工作
- 13. 動作3.0垃圾收集與casalib?
- 14. 爲什麼Lua使用垃圾收集器而不是引用計數?
- 15. 垃圾收集器
- 16. C#垃圾收集器交叉引用
- 17. java垃圾收集是否安全地清除垃圾數據?
- 18. IDispose是必要的,垃圾收集器是否工作在循環結束等
- 19. JavaScript - 垃圾收集器計時器?
- 20. 是否有理由手動調用垃圾收集器?
- 21. JAVA垃圾收集副作用 - 阻塞?
- 22. 計時器不會收集垃圾
- 23. 垃圾收集如何收集自我引用對象?
- 24. 垃圾收集
- 25. 是否ExtJS的自動垃圾收集組件
- 26. 當垃圾收集垃圾時,Haskell是否放棄了火花?
- 27. 是否收集垃圾價值類型?
- 28. GC是否從Metaspace收集垃圾?
- 29. 垃圾收集 - 是否需要?
- 30. WinRT是否有垃圾收集?
您是否嘗試過[查看文檔](http://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html)?或者[其他文檔](http://www.google.com/url?sa=t&source=web&cd=1&ved=0CCQQFjAA&url=http%3A%2F%2Fclang.llvm.org%2Fdocs%2FAutomaticReferenceCounting.html&ei=1iaXTriaLcnPiALP_azDDQ&usg=AFQjCNHBcQAROrz81zpnzFhm8tW7ApG47g )? –
或者只是在這裏做一個搜索:http://stackoverflow.com/questions/6385212/how-does-the-new-automatic-reference-counting-mechanism-work –
謝謝你的幫助,但我只想一個明確的信息,沒有閱讀許多頁面的文檔...否則就沒有理由問stackoverflow的問題... – ADIMO