【问题标题】:Objective C's ARC vs C++'s Manual Memory Management [duplicate]Objective C的ARC与C ++的手动内存管理[重复]
【发布时间】:2014-01-03 06:29:59
【问题描述】:

一个可能的试题如下:

“解释与 c++ 相比,Objective C 的内存管理的优点和缺点

我知道 Objective C 使用 ARC,而 ARC 使我们能够避免破坏仍然被其他东西引用的对象(意思是,它仍然需要)。但我在任何地方都找不到任何缺点。我只能认为“没有缺点”作为答案,但由于该问题明确要求缺点,我猜必须至少有一个。

【问题讨论】:

  • Objective C 不必使用 ARC,它现在很常见。
  • 我在发布此之前确实进行了一些搜索,并且确实遇到了那个,但是,如果您阅读了我的问题,然后阅读该线程中的答案,并尝试找到至少一个真正的缺点除了担心 2011 年的错误和向后兼容性(意味着不再重要的设备)之外,您将找不到任何东西。结果,我的问题是是否使用或 ARC 没有得到回答(我已经知道如何很好地使用这两种方法,因为我在使用 xcode 时通常在 ObjC++ 中编写代码)。
  • @user2970795 这是一个可怕的问题,因为它忽略了许多其他关键的细节。你最好弄清楚教授/老师的心态,而不是试图从这个论坛中获得任何东西。特别是,C++ 和 Objective-C 的本质是如此不同——编译时强调与运行时强调——ARC 与保留/释放/自动释放与众多 C++ 模型之一的细节将没有实际意义 在你的考试中。 IE。您需要学习老师希望您学习的任何内容,而忽略大局。

标签: objective-c memory-management automatic-ref-counting


【解决方案1】:

引用计数可能会解决您没有的问题。它是有代价的,无论您是否想要解决方案,最终都会付出代价。

与直觉可能会说的相反,大多数对象实际上根本不需要共享,并且在它们的整个生命周期中都具有明确定义的唯一所有权。所需要的只是传递这些对象的能力。引用计数提供了这一点,但它提供的更多,而且成本更高。

(此答案将 Objective C 中的引用计数与 C++ 风格的生命周期管理进行比较。它首先不考虑 Obj-C 中的引用计数是否合理。ARC 只是 MRC 的一种自动化形式,如果你是过去使用 MRC 并且是有道理的,那么是否迁移到 ARC 的问题不是这篇文章的重点。相反,这篇文章同样适用于“MRC in Obj-C vs C++”的比较。)

【讨论】:

  • 另外,ARC 在很多层面上都不如 MRC。在 ARC 之前,我们必须注意所有权并做我们的 retains 和 releases。现在,使用 ARC,我们仍然必须这样做,但是我们必须通过包含 完全丑陋 而不是 retainrelease 来掩饰我们仍在编写手动引用代码的事实。最不违反直觉(如果不是“愚蠢”)的演员限定词,例如 __unsafe_unretained__bridge_transfer
  • @H2CO3:谢谢,知道非常有用。
  • 不客气。 IDK 如果你最近正在/已经做过任何 Objective-C 编程;和往常一样,这是我的 - 强烈但有事实支持的 - 意见。最后,这取决于个人喜好,因此如果您想要/需要做出决定,我建议您尝试这两种技术。
  • 感谢您快速回答 Kerrek SB!。您提到它是有代价的,而且它提供的更多并且成本更高。你能告诉我价格和更大的成本是多少吗?那将非常有帮助!
  • 我不认为这是一个答案恐怕..你只说'它是有代价的'而没有说所有真实的东西。
【解决方案2】:

引用计数“使您摆脱”一直在考虑何时删除对象的问题。任何使用该对象的人都会说,我仍然需要它(想要保留它)或者我已经完成了它(我释放它)

这使内存管理更容易,也使代码更易于管理 但 每当你传递东西时,它都会以 2 个额外的方法调用为代价:你必须保留对象,然后保存指针,然后再调用释放它。

当您处理大量成为现实生活问题的对象时。只是额外的调用会影响您的算法性能

特别是如果您不需要任何引用计数,因为使用对象的范围很明确,那么开销只会令人讨厌。


所以它是方便 + 可维护性 vs. 速度

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2011-10-14
    • 1970-01-01
    相关资源
    最近更新 更多