在iOS上使用Objective-C进行开发时,内存管理目前必须由开发人员执行。其他一些移动平台使用自动垃圾收集来消除管理内存的需要。
iOS设备上不使用垃圾收集的原因可能是什么?
发布于 2011-06-17 19:55:59
垃圾收集的问题是,内存使用量会一直增长,直到它被收集为止,因此分配的内存可能会比需要的多。对于内存有限且没有交换选项的设备来说,这是不好的。
当垃圾收集器运行时,它扫描堆以查找不再使用的内存,这是一个昂贵的过程,这将减慢您的设备,直到它完成。
发布于 2011-06-17 20:44:28
在2011 WWDC大会上,苹果公司解释说,他们不希望在移动设备上进行垃圾回收,因为他们希望应用程序能够以最佳使用所提供的资源的方式运行,并且具有很大的确定性。垃圾收集的问题不仅是在垃圾收集器开始工作之前,对象会随着时间的推移而积累,而且您无法控制垃圾收集器何时开始工作。这会导致不确定的行为,当您不想要它们时,可能会导致速度减慢。
底线:你不能说,“好吧,我知道这些对象将在X时间点被释放,它不会与正在发生的其他事件冲突。”
发布于 2011-06-17 20:36:12
主要原因可能是内存负载和性能。引用计数具有较小的内存配置文件,因为它允许应用程序使用的量比引用计数增长得更多。此外,还有一个性能问题,即当垃圾收集器运行时,必须停止其他线程。这在配备快速多核处理器的Macintoshes上并不是什么大问题,但可能会导致移动设备上的UI卡顿。
无论如何,这场辩论可能很快就会变得毫无意义。Clang / LLVM刚刚添加了一个名为automatic reference counting的新功能。这利用了分析功能,自动地放入保留,释放和自动释放,这样程序员就不会有太多。
https://stackoverflow.com/questions/6385285
复制相似问题