在运行时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. 是否有可能在运行时生成并运行TemplateHaskell生成的代码?
- 4. 自动生成代码以批量生产。这是否合理?
- 5. 运行时检查ARC(自动引用计数)
- 6. ColumnHeader.Name产生在运行时
- 7. 产生的线程是否自动作为用户的身份运行?
- 8. 在运行时自动生成自定义事件
- 9. 自动引用计数并完成
- 10. 如何在运行时插入时自动生成两个值?
- 11. 是否有可能在运行时用参数生成一个Python函数?
- 12. 是否可以使用运行时生成的数据执行自动化测试?
- 13. 在运行时动态生成谓词
- 14. 在运行时动态生成JComponent
- 15. 是否有可能在“运行自定义生成”上自动化TeamCity引脚功能
- 16. 正在运行倒计时时产生敌人
- 17. 链接脚本时,它是否会自动运行?
- 18. jQuery-ui自动完成本地工作,但不是生产
- 19. AppFapric是否成熟用于生产
- 20. 生成脚本块包含自定义语言在运行时
- 21. 文件对象在其引用计数为零时是否自动关闭?
- 22. 如何在运行时确定我是否连接到生产数据库?
- 23. 在运行时生成
- 24. 运行时异常产生
- 25. 如何防止在配置/运行时自动生成webconfig
- 26. WPF Datagrid DataGridComboBoxColumn在运行时自动生成
- 27. 什么是自动引用计数?
- 28. 在运行时生成数组
- 29. TeamCity自动生成到生产
- 30. EXT4是否过时生产?
为什么它会在运行时而不是在编译时增加和减少引用计数。 – oneofone