Iphone Objective-C自动引用计数和垃圾收集之间有什么区别?
随着Xcode 4.2中引入了新的自动引用计数(ARC),我们不再需要在Objective-C中手动管理保留/释放Iphone Objective-C自动引用计数和垃圾收集之间有什么区别?,iphone,ios,garbage-collection,automatic-ref-counting,Iphone,Ios,Garbage Collection,Automatic Ref Counting,随着Xcode 4.2中引入了新的自动引用计数(ARC),我们不再需要在Objective-C中手动管理保留/释放 这似乎类似于垃圾收集,如Mac上Objective-C和其他语言中的垃圾收集。ARC与垃圾收集有何不同?正如我在回答中所述,ARC可以提供最佳的手动内存管理和垃圾收集跟踪功能。它主要消除了开发人员跟踪Objective-C对象上的手动保留、释放和自动删除的需要,同时也避免了对垃圾收集器进程的需要,因为垃圾收集器进程可能会耗尽移动设备上的有限资源,并在运行的应用程序中偶尔造成口吃 A
这似乎类似于垃圾收集,如Mac上Objective-C和其他语言中的垃圾收集。ARC与垃圾收集有何不同?正如我在回答中所述,ARC可以提供最佳的手动内存管理和垃圾收集跟踪功能。它主要消除了开发人员跟踪Objective-C对象上的手动保留、释放和自动删除的需要,同时也避免了对垃圾收集器进程的需要,因为垃圾收集器进程可能会耗尽移动设备上的有限资源,并在运行的应用程序中偶尔造成口吃 ARC通过应用所有Objective-C开发人员多年来必须使用的规则,在编译时插入引用计数所需的适当保留和发布。这使开发人员不必自己管理它。因为保留和释放是在编译时插入的,所以不需要收集器进程来不断地扫描内存和删除未引用的对象 与ARC相比,跟踪垃圾收集有一个小小的优势,即ARC,在ARC中跟踪垃圾收集可以提取这些数据 关于这个主题的一本伟大的读物来自于,克里斯·拉特纳(Chris Lattner)有这样一句话: 与ARC相比,GC的主要优势在于它收集数据 周期。第二个优点是“保留”的任务是 “原子”是因为它们是一个简单的存储。ARC有几个大的 与libauto-GC相比的优势:
我目前正在将手动内存管理的项目以及使用Objective-C垃圾收集的项目迁移到ARC。在几个Mac应用程序中使用垃圾收集一段时间后,我发现将这些项目转移到ARC有一些显著的优势。简短而甜蜜的回答如下: java的GC是运行时,而ARC是编译时 GC在运行时引用对象,并检查对象运行时的依赖关系。 当ARC附加发布、保留时,autorelease会在compiletime调用 ARC与垃圾收集有何不同 ARC是垃圾收集的一种形式
您的意思可能是“ARC和跟踪垃圾收集(如JVM和.NET)之间有什么区别?”。主要的区别在于电弧速度较慢,并且存在泄漏循环。这就是JVM和.NET都使用跟踪垃圾收集器的原因。有关更多信息,请阅读。ARC依赖于编译时“引用”对象,这使其在低功耗模式环境(移动设备)中高效运行 GC依赖于基于运行时的“可访问”对象,使其在多线程环境中高效运行 活动 ARC将代码注入到可执行文件中,并根据未使用对象的引用计数对其“自动”执行 GC在运行时工作,因为它将检测未使用的对象图(将消除保留周期),并在不确定的时间间隔内删除它们 自动参考计数的优点
- 实时、确定性地销毁对象 未使用的
- 没有后台处理
- GC可以清理整个对象图,包括保留周期李>
- GC在后台进行,因此所做的内存管理工作更少 作为常规应用程序流程的一部分
- ARC无法自动处理保留循环
- 因为GC发生在后台,所以对象的确切时间范围 释放尚未确定
- 发生GC时,应用程序中的其他线程可能会 暂时搁置