在NSArray中设置值

时间:2012-11-24 01:06:39

标签: iphone objective-c arrays nsmutablearray nsarray

看了一会儿,却找不到答案,但这似乎很简单。我想创建一个NSArray,它有100个对象(Doors)的空间,然后循环遍历为数组中的每个索引创建一个新的门。当我启动NSArray时,如果没有手动编写100个新门的代码,我找不到这样做的方法。我知道我可以通过创建一个NSMutableArray和使用addObject来做到这一点,但我听说NSArrays要快得多,我想知道如何做以备将来参考。

以下是我基本上要做的事情:

NSArray *doors = [[NSArray alloc]init]; //with size 100?
for (int i = 0; i < [doors count]; i++)
    [[doors objectAtIndex:i] = [[Door alloc]init]];

4 个答案:

答案 0 :(得分:3)

如果要将对象添加到循环内的数组中,则NSMutableArray是要使用的正确对象。

创造100扇门:

NSMutableArray *doors = [NSMutableArray new];
for (int i=0; i < 100; i++){
    [doors addObject:[[Door alloc]init]];
}

现在你有一个带有100个门对象的可变数组。 如果您以后无需修改数组,则可以将其转换回 一个用于处理的不可变数组:

NSArray *newDoorList = [NSArray arrayWithArray:doors];

可变阵列和非可变阵列之间可能存在一些轻微的性能命中,但你不会只用几百个对象来注意它们 - 至少这是我的经验。

希望有所帮助。祝你好运。

答案 1 :(得分:1)

创建一个NSMutableArray,然后使用[array copy]获取一个不可变的NSArray。

答案 2 :(得分:1)

对于某些选项,请参阅此答案,基本上创建一个NSMutable数组并使用它来创建NSArray ...

http://www.cocoabuilder.com/archive/cocoa/190315-nsmutablearray-to-nsarray.html#190321

答案 3 :(得分:1)

NSMutableArray是一个动态数组,您无需预定义大小。正如Aleph建议的那样,使用NSMutableArray并将门对象追加100x。像这样:

 NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:100];

 for ( int i = 0; i < 100; i++ ) {

      [myArray addObject: [[Door alloc] init]];
 }

 NSArray *filledArray = [NSArray arrayWithArray:myArray];

刚编辑以包含arrayWithCapacity:方法。根据这个SO线程,如果你知道你需要的完全号码,它应该只是一次分配内存。除此之外,NSArray与NSMutableArray不会在速度方面表现出那么大的差异。 (直到证明错了.O_o)

Disadvantage of using NSMutableArray vs NSArray?