我在 Objective-C 和 Cocoa 中弄湿了我的脚,我注意到所有对象都是从堆中分配的。
为什么这是 Objective-C 中的标准?我特别热衷,因为 Objective-C 被认为是具有 OO 特性的 C 的严格超集。
我在 Objective-C 和 Cocoa 中弄湿了我的脚,我注意到所有对象都是从堆中分配的。
为什么这是 Objective-C 中的标准?我特别热衷,因为 Objective-C 被认为是具有 OO 特性的 C 的严格超集。
我认为这归功于 Smalltalk 的传统。
此外,您可以说堆栈分配的对象是 C++ 的一个特性。很少有其他语言这样做,然后主要作为编译器的低级优化。在 C++ 中这是合理的,因为其中一个既定目标是与普通 C完全相同。
为什么你觉得这与 Objective-C 是 C 的超集这一事实相矛盾?毕竟,纯 C 既不能在堆栈上分配对象……也不能在任何地方分配对象。 struct
s,OTOH,在 C 和 Objective-C 上都允许在堆栈中
我并没有完全回答您的问题,但是由于您了解 Obj-C 的运行时,所以就这样吧。您可以使用 NSZone 更有效地分配对象。您不会将它们放在堆栈上,但至少可以避免一些碎片和性能问题: link text