gpt4 book ai didi

objective-c - 在 objective-c 中同时使用垃圾收集器和 ARC

转载 作者:太空狗 更新时间:2023-10-30 04:00:07 25 4
gpt4 key购买 nike

我读到垃圾收集是在 objective-c 中使用 AUTOZONE(LIBAUTO) 完成的。

垃圾收集器也可用于 OS X 10.8。在学习时,我在想如果垃圾收集器可用,ARC 的需求是什么。然后从 stackoverflow.com 上的资源中,我了解了 ARC 和垃圾收集器之间的区别以及两者之间的优势。

现在我知道 ARC 在编译时工作,而垃圾收集器在运行时工作。此外,ARC 无法释放 CFTypes 的内存,它仅适用于 Objective-C 类型。垃圾收集器可以释放使用 ARC 无法完成的保留周期。

现在我想知道我们能否同时使用 ARC 和垃圾收集器,因为两者都在 os x 10.7 中可用。还有为什么垃圾收集器在 10.8 之后被弃用。 ARC 是垃圾收集器的替代品吗?它可以释放垃圾收集器完成的所有种类的对象。

另外既然ios没有垃圾收集器,那么在ARC之前ios用什么来进行垃圾收集。如果正确执行手动内存管理是否能够管理所有内容,如果正确处理手动内存管理则不需要垃圾收集?

最佳答案

据我所知,没有(简单的)方法可以同时启用这两者,而且它无论如何也没有意义。

您几乎已经自己回答了这个问题:GC 和 ARC 都有相同的目的,清理内存。 GC 具有捕获 ARC 无法捕获的内容的优势,但它具有运行时惩罚。使用 ARC,如果你没有正确使用它,你仍然可以泄漏内存,但如果使用正确(主要是:你遵守命名约定),ARC 的主要优势是将你从手动管理负担中解放出来,并具有出色的运行时性能。

所以你选择了一个或另一个,混合它们真的没有意义。如果您启用了 GC,ARC 所做的所有工作几乎都是无用的,因此会浪费性能。

顺便说一句,在 ARC 之前,我们使用 retain/release 进行手动内存管理。事实上,这仍然是一个选项并且仍在广泛使用(例如,我从事一个大型项目,转换为 ARC 会很麻烦)。

关于objective-c - 在 objective-c 中同时使用垃圾收集器和 ARC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19996746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com