代码之家  ›  专栏  ›  技术社区  ›  S.P

了解Objective-C的动态运行时

  •  2
  • S.P  · 技术社区  · 15 年前

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

    这是目标C中的标准有什么原因吗?我试着到处找(是的,甚至在stackoverflow上),但是我找不到任何明确的原因,除了“这就是原因”。我特别感兴趣,因为Objective-C被认为是具有OO特性的严格的超级C集。

    如果我错过了一篇关于 InterBlag 或者在StackOverflow上错误地发帖子,请启动优雅的关机。:)

    2 回复  |  直到 15 年前
        1
  •  2
  •   Javier    15 年前

    我认为这应该归功于小说家的传统。

    而且,你可以说栈分配对象是C++的一个特性。很少有其他语言能做到这一点,然后主要作为编译器的低级优化。在C++中,它是合理的,因为其中的一个目标是 确切地 性能和普通C一样。

    为什么你觉得这与客观C是一个超C集的事实相冲突?毕竟,普通C不能在堆栈上分配对象…也不是任何地方。 struct S,Otoh,允许出现在堆栈上,包括C和Objective-C上。

        2
  •  0
  •   Marco Mustapic    15 年前

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