我有一个for
循环。在该循环内部,我想用一些对象填充NSArray
。但我没有看到任何让我这样做的方法。我事先知道有多少物品。我想避免使用NSMutableArray
,因为有些人告诉我,与NSArray
相比,这是一个非常大的开销和性能制动。
我有这样的事情:
NSArray *returnArray = [[NSArray alloc] init];
for (imageName in imageArray) {
UIImage *image = [UIImage imageNamed:imageName];
//Now, here I'd like to add that image to the array...
}
我查看了NSArray
的文档,但是如何指定那里有多少元素?或者我必须真的使用NSMutableArray
吗?
答案 0 :(得分:28)
是的,您需要使用NSMutableArray
:
int count = [imageArray count];
NSMutableArray *returnArray = [[NSMutableArray alloc] initWithCapacity:count];
for (imageName in imageArray) {
UIImage *image = [UIImage imageNamed:imageName];
[returnArray addObject: image];
...
}
编辑 - 声明已修复
答案 1 :(得分:4)
您需要使用NSMutableArray,因为添加是变异而NSArray是不可变的。
您之后可以将NSMutableArray
填充到NSArray
(see here for a discussion),但不会很快将项目添加到常规旧NSArray
。
答案 2 :(得分:3)
这是使用NSMutableArray的好时机吗?
我知道你提到过你想避免它,但有时这样的事情是有道理的。
答案 3 :(得分:2)
我建议只有在您知道NSMutableArray
导致性能下降时才进行优化,但如果确实如此,您可以在填充后从可变数组中创建静态aray 。这取决于性能影响是由您随后使用NSMutableArray
还是仅通过创建它而引起的。
我的猜测是,这不会成为您应用的性能瓶颈。