为什么我们在iphone中创建的大多数对象都是指针..? 比如我创建NSString * str,NSMutableDictionary * dict .. etc
答案 0 :(得分:4)
简答
因为Objective-C对象只能在堆上分配并作为指针进行操作。
长答案
Objective-C要求在堆上分配类并作为指针进行操作,因为多态需要使用指针,因为指向接口的指针总是具有相同的大小,而接口的不同实现可能具有不同的大小。在C ++中,可以为类使用自动(堆栈)和动态(堆)存储;但是,在前一种情况下,必须要注意切片(当派生类型被分配给基类型时,导致对象丢失使其成为派生类型而不是基类型的内容),并且仅使用指针Obj-C消除了这个潜在的陷阱。此外,允许堆栈分配的对象使Objective-C所具有的引用计数方案变得复杂,并且由于堆栈分配的对象仅存在于创建它们的范围内,因此无论如何通常会在堆上分配对象,因此支持对象作为堆栈分配值将是边际效益。作为旁注,我还应该提到在Java和C#中,对象同样被限制为仅堆分配。