Objective C使用的ARC AC算法用于内存管理,这是垃圾回收吗?

48 浏览
0 Comments

Objective C使用的ARC AC算法用于内存管理,这是垃圾回收吗?

自2011年苹果公司推出自动引用计数以来,我从未真正考虑过它,但如果您查看ARC算法并根据苹果公司的文档,所有对象将在一段时间后被销毁。如果我看到来自WWDC 2011的发布视频,您会发现这不是垃圾回收器。因此,问题是,如果它使用垃圾收集器算法,并且所有对象最终都会被销毁,那么为什么不是垃圾收集器呢?抱歉如果以前有人提出过这个问题,但我对此问题非常困惑,需要帮助理解。

admin 更改状态以发布 2023年5月21日
0
0 Comments

ARC与垃圾回收算法完全无关。自动引用计数(ARC)使用引用计数作为其基础机制来判断对象的可达性。相反,垃圾回收算法维护“根”对象列表(例如局部变量、静态变量、线程对象),并使用这些根来遍历对象图以检查对象的可达性。这个过程是非确定性的,因为你永远不知道GC算法何时运行,以及不再引用的对象何时被垃圾回收。你只知道它们最终会被垃圾回收,但“最终”可能意味着很长时间。\n\n由于GC使用图遍历进行可达性分析,它不关心图中的循环:如果一个对象可以从一些不在根集中的对象集合到达,它仍然被视为垃圾,并将被回收。因此,在使用引用计数系统时,您无需担心保留循环——这是一个非常真实的问题,需要时刻记在心中。\n\n引用计数比垃圾回收简单得多:每个对象都有一个引用计数,它在图示中显示。retain会增加它,release会减少它。一旦计数达到零,对象就会被销毁。这就是全部!ARC所做的就是自动插入对retain和release的调用。事实上,仅通过这个图,无法确定我们是在讨论新的ARC还是Cocoa的预ARC内存管理。在引用计数系统下,你知道你的对象何时会被释放——一旦它的引用计数达到零就会发生。自动释放使这对你不太可见,因为最后的引用可能是在你的代码之外释放的,但这并不使过程变得非确定性。此外,语言允许您通过让您自己创建自动释放池来完全控制自动释放。

0
0 Comments

这是一个有些哲学性质的问题,但本质上它是一个在编译时进行垃圾回收的机制,与运行时垃圾收集器不同。

它不使用程序一起运行的垃圾收集子系统,而是管理对象的保留计数并确保所有必要的释放和保留被放置在正确的位置。

这个实际上的优点是因为是由编译器完成,所以比手动保留/释放更少出错,因为是在编译时完成,所以比垃圾回收器更快。

这个问题可以进一步阐明这个问题。

0