2010-06-15 38 views

回答

4

简短回答
由于Objective-C的对象只能在堆上分配和操纵作为指针。

龙回答
Objective-C的要求类中在堆上分配和操纵作为指针,因为多态性需要使用指针,因为指针的接口将始终具有相同的大小,而不同的实施方式的界面可能有不同的大小。在C++中,可以为类使用自动(堆栈)和动态(堆)存储;然而,在前一种情况下,必须注意切片(当派生类型被分配给基类型时,导致对象丢失使其成为派生类型而不是基类型的内容),并且仅使用指针Obj-C消除了这个潜在的陷阱。此外,允许堆栈分配的对象复杂化了Objective-C所具有的引用计数方案,并且由于堆栈分配的对象仅存在于创建它们的范围中,所以通常会在堆上分配对象,因此在那里在支持对象作为堆栈分配值时会有边际收益。作为一个方面说明,我还应该提到,在Java和C#中,对象同样被限制为仅堆分配。

+0

实际上,您可以(并且在使用块时)在堆栈上创建ObjC对象:http://www.mikeash.com/pyblog/friday-qa-2010-01-15-stack-and-heap-objects -in目标,c.html – 2010-06-15 10:35:09

相关问题