在iOS上使用Objective-C进行开发时,内存管理目前必须由开发人员执行。其他一些移动平台使用自动垃圾回收来消除管理内存的需要。
为什么在iOS设备上不使用垃圾回收呢?
在iOS上使用Objective-C进行开发时,内存管理目前必须由开发人员执行。其他一些移动平台使用自动垃圾回收来消除管理内存的需要。
为什么在iOS设备上不使用垃圾回收呢?
垃圾回收的问题在于内存使用会持续增长直到进行回收,因此可能会分配比实际需要更多的内存。这对于内存受限且无法交换的设备来说是不利的。
当垃圾回收器运行时,它会扫描堆以查找不再使用的内存,这是一个昂贵的过程,会导致设备变慢直到完成为止。
在2011年的WWDC上,苹果公司解释说他们不希望移动设备使用垃圾回收机制,因为他们希望应用程序能够以最佳的资源利用和确定性运行。垃圾回收机制的问题不仅在于对象会随着时间的推移而累积,直到垃圾收集器启动清理,还在于你无法控制垃圾收集器何时启动。这会导致非确定性行为,可能会在你不想要它们发生的时候导致减速。
底线:你无法确定某个时间点对象将被释放,并且不会与正在发生的其他事件冲突。