自动引用计数是否会在运行时产生成本

时间:2016-08-12 12:48:49

标签: objective-c swift memory-management automatic-ref-counting

ARC是否在运行时做了额外的事情?关于this answer的评论说" ARC在运行时碰撞引用计数,仅在它们达到零时释放#34;这是真的?如果是这样,如果在编译时添加了释放调用,为什么要这样做呢?

2 个答案:

答案 0 :(得分:0)

ARC遵循与C ++的std :: shared_ptr类似的机制(如果不是相同的话),它使用引用计数来查看,如果当对象超出范围时,退出时间函数应该叫;在Obj-C的情况下,该调用将会发布。

编译器添加的释放调用,用于管理引用计数的递减方式; clang机制执行它的方式是非常敏捷的,并且可以省去检查是否有平衡的释放调用以及永久调用每个增加引用计数的方法的麻烦。

因此,对于您的原始问题,ARC不应在运行时应用程序中产生额外的性能成本。

如果您怀疑自己的应用程序存在内存问题,则应在应用程序中对应用程序进行分析,并查看花费的时间。

记忆优化是一个完全不同的蜡球,幸好有解决方案。因此,如果您的高线程应用程序存在并发内存分配问题,您可以查看一个开源库,如英特尔的线程构建模块,它带有一个出色的内存管理器,但需要警告,它&# 39; s为C / C ++设计。

顺便说一下,有关ARC的详细说明,请阅读此页:http://clang.llvm.org/docs/AutomaticReferenceCounting.html

答案 1 :(得分:0)

ARC是免费的 - 它会增加和减少引用计数,并在引用计数为0时释放对象。

与手动保留/释放相比,ARC将是正确的,它可能不经常调用保留/释放,因为它通常知道保留/释放对何时相互抵消,并且保留/释放更快,因为它没有&#39 ; t调用Objective-C方法调用(在Objective-C中,你可以覆盖retain / release;使用ARC你可以&#t; t)。