0

しばらく見回して答えが見つかりませんでしたが、とても簡単なことのようです。100個のオブジェクト(ドア)用のスペースがあるNSArrayを作成してから、ループして配列内のインデックスごとに新しいドアを作成したいと思います。NSArrayを初期化するときに、100個の新しいドアのコードを手動で記述せずにこれを行う方法を見つけることができませんでした。NSMutableArrayを作成してaddObjectを使用するだけでこれを実行できることはわかっていますが、NSArrayの方がはるかに高速であると聞いているので、後で参照できるようにこれを実行する方法を知りたいと思います。

これが私が基本的にやろうとしていることです:

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

4 に答える 4

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];

変更可能な配列と変更不可能な配列の間には、パフォーマンスに多少の影響があるかもしれませんが、数百のオブジェクトでは気付かないでしょう - 少なくともそれは私の経験です。

それが役立つことを願っています。幸運を。

于 2012-11-24T01:15:00.733 に答える
1

NSMutableArrayを作成し、[array copy]を使用して、変更不可能なNSArrayを取得します。

于 2012-11-24T01:11:41.497 に答える
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)

NSMutableArray と NSArray を使用することの欠点?

于 2012-11-24T01:14:50.023 に答える
1

いくつかのオプションについてはこの回答を参照してください。基本的には NSMutable 配列を作成し、それを使用して NSArray を作成します...

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

于 2012-11-24T01:13:26.573 に答える