新的自动引用计数机制是如何工作的?

48 浏览
0 Comments

新的自动引用计数机制是如何工作的?

有人能简要地解释一下ARC是如何工作的吗?我知道它与垃圾回收不同,但我只是想知道它是如何工作的。

此外,如果ARC能够在不影响性能的情况下完成GC所做的事情,那么为什么Java要使用GC?为什么它不也使用ARC呢?

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

每一个学习Objective-C的新开发者都需要学习严格的内存管理规则,包括何时保留、释放和autorelease对象。这些规则甚至还规定了命名惯例,暗示从方法中返回的对象的保留计数。只要你牢记并始终应用这些规则,Objective-C中的内存管理就会变得自然。但即使是最有经验的Cocoa开发人员也会偶尔犯错。 \n\n通过Clang静态分析器,LLVM开发人员意识到这些规则足够可靠,可以构建一个工具来指出代码路径内的内存泄漏和过度发布。 \n\n自动引用计数(ARC)是下一个逻辑步骤。如果编译器能够识别您应该保留和释放对象的位置,为什么不让它为您插入该代码呢?刻板、重复的任务是编译器及其同类的强项。人们会忘记东西并犯错误,但计算机更加一致。 \n\n但是,在这些平台上,这不完全使您从内存管理中解放出来。我在这里描述了需要注意的主要问题(保留周期),这可能需要您思考一下如何标记弱指针。但是,当与ARC相比时,这只是小问题。 \n\n与手动内存管理和垃圾回收相比,ARC通过消除编写保留/释放代码的需求,同时不具有垃圾回收环境中出现的停顿和锯齿形内存配置文件的优点,为您带来了最佳的两个世界。与此相比,垃圾收集仅具有处理保留周期的能力以及原子属性分配廉价的事实(如此处所述)。我知道我正在用ARC实现替换我所有现有的Mac GC代码。关于是否可以将此扩展到其他语言,似乎是围绕Objective-C中的引用计数系统而设计的。将此应用于Java或其他语言可能会很困难,但我对低级编译器细节不够了解,不能做出明确的陈述。鉴于苹果是LLVM中推动这一努力的人,除非另一个团队投入了大量资源,Objective-C将首要考虑。 在WWDC上揭晓了这一点,这使开发人员感到震惊,因为他们并不知道可以做到这样的事情。随着时间的推移,它可能会出现在其他平台上,但目前它仅限于LLVM和Objective-C。

0