aon*_*aon 10 iphone objective-c
我有两个功能,我应该使用哪一个?请解释一下差异.
A:
- (NSMutableArray *)FunctionA:(int)count {
NSMutableArray *a = [[NSMutableArray alloc] init];
for (int i = 0; i < count; i++) {
[a addObject:[NSNumber numberWithInt:0] ];
}
return [a autorelease];
}
Run Code Online (Sandbox Code Playgroud)
B:
-(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] ?
}
Run Code Online (Sandbox Code Playgroud)
Jos*_*zzi 28
第一个创建可变数组而不指定容量.这会导致在添加项目时数组必须增长.在内部,这可能经过大量优化,一次发生"块",但仍需要增加数组并在添加项目时分配更多空间.
第二个给数组一个提示(你可能需要"这么多"的空间),以避免在添加已知数量的对象时增加数组的开销.当然,如果需要,它仍然会变大(就像你没有指定容量一样).如果您已经提前了解计数,则应使用此方法.计数很大,速度更快.
如果您在优化之前没有测量过,那么这有一个缺点:如果您正在创建一个具有非常高容量但不总是使用该容量的可变阵列,则会产生分配所有空间的代价.
此外,你没有自动释放B(如你所注释的那样),因为你没有用init创建可变数组 - 你使用了一个方便的方法,它自己做了,这意味着你不负责释放它.正如我在对您的问题的另一个答案的评论中提到的,您还可以使用以下命令创建数组:
[[NSMutableArray alloc] initWithCapacity:capacity];
...然后在准备好后释放它.与使用自动释放池相比,这使您可以更好地控制内存使用,这是iPhone平台上的一个重要考虑因素.
但请记住:先测量,然后根据需要进行优化.
归档时间: |
|
查看次数: |
8968 次 |
最近记录: |