【问题标题】:Project without garbage collector osx没有垃圾收集器osx的项目
【发布时间】:2016-03-31 15:08:17
【问题描述】:

在我的学校里,我们收到了用任何编程语言做项目的任务,但是使用自定义数据结构和编程语言不能有垃圾收集器。建议使用 C++。但我在objective-c方面有更好的技能。所以我在我的 Xcode 项目中禁用了 ARC,现在我应该在 Java 中创建像 ArrayList 这样的自定义数据结构。我不能使用 NSMutableArray 或 NSArray。是否可以像在 C++ 中一样使用内存并创建自定义数据结构?

感谢您的回复

【问题讨论】:

  • ARC 不是垃圾收集器。在Objective-C中,您可以使用struct,还可以创建“自定义数据结构”,我认为这只是自定义“NSObject”,具有您想要的任何属性?
  • @Larme 我知道 ARC 不是垃圾收集器,但如果我禁用 ARC,我可以手动删除对象。创建自定义结构struct 或新的NSObject 哪个更好?我想要像 Java 中的 ArrayList 一样的属性
  • @Larme - 引用计数一种垃圾收集技术。参见例如Wikipediathis book,甚至this Microsoft blog(这只是我按顺序获得的前三个谷歌点击)。 ARC 是一个引用计数垃圾收集器,它取代了以前的标记清除(不是 100% 确定)。

标签: objective-c macos data-structures automatic-ref-counting


【解决方案1】:

您有两个基本选择:

  1. struct 用于您的数据结构,将malloc/free(和朋友)用于您的动态内存分配——就像在C(++) 中一样;或
  2. 您可以使用NSObject 派生类和alloc/init/new/retain/release(和朋友)进行动态内存管理。为此,您必须禁用 ARC。

鉴于这是一项学校任务,您可能希望检查第二项是否可以接受 - 即使您手动调用操作,您仍在使用 Objective-C 引用计数机制。你的教授可能不认为这是可以接受的。

第一个选择更基本,您将对何时不再需要内存的所有决定负全部责任。实际上,您可以选择实现自己的引用计数甚至标记扫描。

HTH

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2018-11-20
    相关资源
    最近更新 更多