【问题标题】:Understanding Objective-C's dynamic runtime了解 Objective-C 的动态运行时
【发布时间】:2010-11-03 03:54:32
【问题描述】:

我开始接触 Objective-C 和 Cocoa(我知道,可能晚了,但是我必须从某个地方开始),我注意到所有对象都是从堆中分配的。

这是否是 Objective-C 的标准?我试着到处寻找(是的,甚至在 StackOverflow 上),但我找不到任何明确的原因,除了“就是这样”。我特别热衷,因为 Objective-C 被认为是具有 OO 特性的 C 的严格超集。

如果我错过了 InterBlag 上的文章或 StackOverflow 上有关此主题的帖子,请启动正常关闭。 :)

【问题讨论】:

    标签: objective-c memory-management heap-memory


    【解决方案1】:

    我认为这归功于 Smalltalk 的传统。

    此外,您可以说堆栈分配的对象是 C++ 的一个特性。很少有其他语言这样做,然后主要作为编译器的低级优化。在 C++ 中这是合理的,因为其中一个既定目标是完全与普通 C 一样具有性能。

    为什么你觉得这与 Objective-C 是 C 的超集这一事实相矛盾?毕竟,纯 C 既不能在堆栈上分配对象……也不能在任何地方分配对象。 structs, OTOH,在 C 和 Objective-C 上都允许在堆栈上

    【讨论】:

    • “普通 C 不能在堆栈上分配对象......也不在任何地方”我猜是这样,因为没有对象(嗯,是的,结构和其他可以“模拟”OO的黑客功能...)为什么我觉得它有冲突只是因为 C 支持堆栈和堆分配,因此很自然地假设 C++ 会为其对象这样做,它确实做到了。 Objective-C 也是如此。但是,纳达。无论如何,我对您的回答感到满意,但我会推迟“正确投票”以等待/鼓励其他答案。 :)
    【解决方案2】:

    我并没有完全回答你的问题,但既然你了解 Obj-C 的运行时,那就这样吧。您可以使用 NSZone 更有效地分配对象。您不会将它们放在堆栈上,但至少可以避免一些碎片和性能问题: link text

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多