2010-06-15 40 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

相關問題