2

我在 Objective-C 和 Cocoa 中弄湿了我的脚,我注意到所有对象都是从堆中分配的。

为什么这是 Objective-C 中的标准?我特别热衷,因为 Objective-C 被认为是具有 OO 特性的 C 的严格超集。

4

2 回答 2

2

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

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

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

于 2009-06-15T22:07:01.627 回答
0

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

于 2009-06-20T04:47:24.437 回答