在運行時ARC會做額外的事情嗎?關於this answer的評論說「ARC在運行時顛簸引用計數,只有在它們達到零時纔會釋放」。這是真的?如果是這樣的話,爲什麼在編譯時添加發布調用的時候呢?自動引用計數在運行時是否產生成本
0
A
回答
0
ARC是不是免費的 - 它會增加或減少引用計數,和dealloc的對象時,引用計數爲0
與手動保留/釋放相比,ARC將是正確的,它可能更少地調用保留/釋放,因爲它經常知道保留/釋放對何時取消彼此,保留/釋放更快,因爲它沒有呼叫Objective-C方法調用(在Objective-C中,你可以覆蓋保留/釋放;用ARC你不能)。
0
ARC遵循與C++的std :: shared_ptr類似的機制(如果不是相同的話),std :: shared_ptr使用引用計數來查看對象是否超出範圍時應該調用exit time函數;在Obj-C的情況下,該調用將會釋放。
編譯器添加的版本調用,用於管理引用計數如何遞減;叮噹聲機制的作用非常明確,並且可以節省檢查是否有平衡呼叫的問題,以便永遠呼叫每個增加引用計數的方法。
因此,關於您的原始問題,ARC不應在運行時應用程序中產生額外的性能成本。
如果您懷疑您的應用程序存在內存問題,那麼您應該在樂器中對您的應用程序進行配置並查看所用時間。
內存優化是一個完全不同的蠟球,幸好有解決方案。因此,如果您的高度線程化應用程序在併發內存分配方面存在問題,您可以查看像英特爾的線程構建模塊這樣的開源庫,它具有出色的內存管理器,但需要注意的是,它專爲C/C++ 。
順便說一句,對於ARC的詳細說明,請閱讀此頁:http://clang.llvm.org/docs/AutomaticReferenceCounting.html
相關問題
- 1. 自動生成後運行Powershell腳本
- 2. 變量引用(別名)是否會導致運行時成本?
- 3. 自動生成代碼以批量生產。這是否合理?
- 4. 運行時檢查ARC(自動引用計數)
- 5. 產生的線程是否自動作爲用戶的身份運行?
- 6. 在運行時自動生成自定義事件
- 7. 自動引用計數並完成
- 8. 如何在運行時插入時自動生成兩個值?
- 9. 是否有可能在運行時用參數生成一個Python函數?
- 10. 在運行時動態生成謂詞
- 11. 生成腳本塊包含自定義語言在運行時
- 12. 文件對象在其引用計數爲零時是否自動關閉?
- 13. 如何在運行時確定我是否連接到生產數據庫?
- 14. AppFapric是否成熟用於生產
- 15. 在運行時生成
- 16. 如何防止在配置/運行時自動生成webconfig
- 17. 什麼是自動引用計數?
- 18. EXT4是否過時生產?
- 19. AS3:是否可以在運行時從矢量生成動畫精靈表單?
- 20. Z3_ast引用計數是否在Z3外計數引用?
- 21. 自動啓動生成的產品包
- 22. 自動引用計數
- 23. Android:Button.setOnClickListener在運行時產生錯誤
- 24. FIleNotFoundException錯誤在運行時產生
- 25. 在啓動時自動運行shell腳本(自動啓動)
- 26. 成功的Gradle項目構建在運行時產生NoClassDefFoundError
- 27. 是否有人在Mono上運行生產ASP.NET網站?
- 28. 更新行時是否始終觸發生成列的計算?
- 29. 是否可以通過腳本自動生成我的Linq2Sql DBML?
- 30. 是否有自動生成腳本清晰庫的工具?
爲什麼它會在運行時而不是在編譯時增加和減少引用計數。 – oneofone