如何动态填写NSArray?

时间:2009-05-08 12:31:20

标签: iphone objective-c uikit nsmutablearray nsarray

我有一个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吗?

4 个答案:

答案 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填充到NSArraysee here for a discussion),但不会很快将项目添加到常规旧NSArray

答案 2 :(得分:3)

这是使用NSMutableArray的好时机吗?

我知道你提到过你想避免它,但有时这样的事情是有道理的。

答案 3 :(得分:2)

我建议只有在您知道NSMutableArray 导致性能下降时才进行优化,但如果确实如此,您可以在填充后从可变数组中创建静态aray 。这取决于性能影响是由您随后使用NSMutableArray还是仅通过创建它而引起的。

我的猜测是,这不会成为您应用的性能瓶颈。