看了一会儿,却找不到答案,但这似乎很简单。我想创建一个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]];
答案 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)