gpt4 book ai didi

iphone - NSMutableArray -init 与 +arrayWithCapacity :

转载 作者:太空狗 更新时间:2023-10-30 03:25:03 29 4
gpt4 key购买 nike

我有两个函数,应该使用哪一个?请解释区别。

答:

- (NSMutableArray *)FunctionA:(int)count {

NSMutableArray *a = [[NSMutableArray alloc] init];

for (int i = 0; i < count; i++) {
[a addObject:[NSNumber numberWithInt:0] ];
}

return [a autorelease];
}

乙:

-(NSMutableArray *)FunctionB:(int)count {

NSMutableArray *b = [NSMutableArray arrayWithCapacity:count];

for (int i=0;i<count; i++){
[b addObject:[NSNumber numberWithInt:0] ];
}

return b; // or [b autorelease] ?
}

最佳答案

第一个创建一个不指定容量的可变数组。这会导致数组在您添加项目时必须增长。在内部,这可能已经过大量优化以“一次分块”出现,但在添加项目时仍然需要增加数组并分配更多空间。

第二个给数组一个提示(您可能需要“这么多”空间)以避免在添加已知数量的对象时增加数组的开销。当然,如果需要它仍然会变大(就像您没有指定容量一样)。如果您已经提前知道计数,则应该使用这种方法。计数越大速度越快。

但是,如果您在优化之前没有进行测量,这会有一个缺点:如果您正在创建一个具有非常高容量的可变数组但并不总是使用该容量,那么您将招致白白分配所有空间的惩罚。

此外,您没有自动释放 B(正如您注释掉的那样),因为您没有使用 init 创建可变数组 - 您使用了一种方便的方法,它自己完成了它,这意味着您不负责释放它。正如我在对您问题的另一个答案的评论中提到的,您还可以使用以下方法创建数组:

[[NSMutableArray alloc] initWithCapacity:capacity];

...然后在准备好后释放它。与使用自动释放池相比,这使您可以更好地控制内存使用,这是 iPhone 平台上的一个重要考虑因素。

不过请记住:先测量,然后在必要时进行优化。

关于iphone - NSMutableArray -init 与 +arrayWithCapacity :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1730706/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com