了解Objective-C的动态运行时

时间:2009-06-15 21:16:39

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

另外,你可以说堆栈分配的对象是C ++的特性。很少有其他语言可以做到这一点,然后主要作为编译器的低级优化。在C ++中它是合理的,因为其中一个声明的目标是完全与普通C一样高。

为什么你觉得这与Objective-C是超级C的事实相冲突?毕竟,普通的C既不能在堆栈上分配对象......也不能在任何地方分配对象。在C和Objective-C

上允许struct,OTOH,在堆栈上

答案 1 :(得分:0)

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