为什么iOS没有自动垃圾收集?

时间:2011-06-17 11:47:38

标签: iphone objective-c garbage-collection

在iOS上使用Objective-C进行开发时,内存管理当前必须由开发人员执行。一些其他移动平台使用自动垃圾收集来消除管理内存的需要。

iOS设备上没有使用垃圾收集的原因是什么?

3 个答案:

答案 0 :(得分:20)

垃圾收集的问题是内存使用量会在收集之前增长,因此可能会分配超出必要内存的内存。这对于内存受限且没有交换选项的设备来说很糟糕。

当垃圾收集器运行时,它会扫描堆以查找不再使用的内存,这是一个昂贵的过程,会导致设备运行速度变慢。

答案 1 :(得分:10)

在WWDC 2011上,Apple解释说他们不希望在他们的移动设备上进行垃圾收集,因为他们希望应用程序能够最好地利用所提供的资源并且具有很大的决定性。垃圾收集的问题不仅是垃圾收集器启动之前对象会随着时间的推移而累积,而且当垃圾收集器启动时,您无法控制。这会导致非确定性行为可能导致您不想要的时候出现减速。

底线:你不能说,"好的。我知道这些物体将在X点被释放,并且不会与正在发生的其他事件发生碰撞。"

答案 2 :(得分:3)

主要原因可能是内存负载和性能。引用计数具有较小的内存配置文件,因为它允许应用程序使用的数量比引用计数增长得多。此外,存在性能问题,当垃圾收集器运行时,必须停止其他线程。对于使用快速多核处理器的Macintoshes来说,这不是一个大问题,但可能会导致用户界面在移动设备上断断续续。

无论如何,辩论可能很快就会出现。 Clang / LLVM刚刚添加了一个名为automatic reference counting的新功能。这利用了分析功能自动输入保留,释放和自动释放,以便程序员也没有。