【发布时间】:2013-11-15 08:36:44
【问题描述】:
我读到垃圾收集是在目标 c 中使用 AUTOZONE(LIBAUTO) 完成的。
垃圾收集器也可用于 OS X 10.8。在学习时,我在想如果垃圾收集器可用,ARC 的需求是什么。然后从 stackoverflow.com 上的资源中,我了解了 ARC 和垃圾收集器之间的区别以及两者之间的优势。
现在我知道 ARC 在编译时工作,而垃圾收集器在运行时工作。 ARC 也不能释放 CFTypes 的内存,它只适用于目标 C 类型。垃圾收集器可以释放使用 ARC 无法完成的保留周期。
现在我想知道我们可以同时使用 ARC 和垃圾收集器,因为两者都在 os x 10.7 中可用。还有为什么垃圾收集器在 10.8 之后被弃用。 ARC 是垃圾收集器的替代品吗?它可以释放垃圾收集器完成的所有类型的对象。
另外由于垃圾收集器在 ios 中不可用,那么在 ARC 之前的 ios 中用于垃圾收集的东西。手动内存管理是否能够正确处理所有事情,如果手动内存管理处理得当,是否不需要垃圾收集?
【问题讨论】:
-
ARC 旨在成为垃圾收集器的卓越替代品。我不知道有任何官方方法可以同时使用它们,并且看不出你需要这个的理由。
-
我不使用 ARC。在 ARC 出现之前,我已经开始在 Objective-C++ 中使用来自 C++ 的智能指针。它比 Apple 的 ARC 更好:它与旧的非弧形代码完美配合,并且不需要代码转换,并且在您的情况下可以与垃圾收集一起使用。所以我的建议:如果你熟悉 C++,那么最好使用智能指针而不是 ARC。
-
@Cy-4AH ARC 用于 Objective-C 内存管理,智能指针(如在 std::shared_ptr 中)用于 C++ 内存管理。您不会使用一个“代替”另一个,它们具有不同的角色。
-
谢谢你们俩。我目前没有从事任何使用它的项目。只是在目标 c 中清除我的内存管理概念。
-
@Cy-4AH:另外,尝试自己重塑
std::shared_ptr之类的东西肯定是出了问题的迹象:你真的认为自己一个人可以做得更好吗? 一群具有多年经验的其他专家?
标签: objective-c macos garbage-collection automatic-ref-counting