我是Objective C的新手。我对内存分配有一点疑问。
如果我们声明&为NSArray分配内存,如下所示:
NSArray * arr = [[NSArray alloc]init];
将为阵列arr
分配多少内存?
答案 0 :(得分:3)
嗯。如果你真的想要NSArray
,那么数组将为空,不会存储任何元素,因此只需要少量内存,无论如何都需要任何Objective C对象。 (确切的内存量是实现细节)。但是无法修改的空NSArray
没什么用处,所以我想你的意思是NSMutableArray
。对于NSMutableArray
,数组最初将为空,但可能仍然会分配一些额外的内存(并且它很可能会这样),因为Objective C期望数组增长并且更容易如果已经在严格需要的基础上分配了一些内存,则向数组中添加新元素。分配的额外内存的确切数量也是一个实现细节。
如果要确保阵列占用尽可能少的内存,可以使用[[NSMutableArray alloc] initWithCapacity:x]
,其中x
是要放入阵列的最大元素数。它的大小仍为零,但Objective C将假设您迟早要向其添加x
元素,因此它会为x
个对象分配足够的后备存储。