15

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

4 に答える 4

27

はい、使用する必要がありますNSMutableArray

int count = [imageArray count];
NSMutableArray *returnArray = [[NSMutableArray alloc] initWithCapacity:count];
for (imageName in imageArray) {
    UIImage *image = [UIImage imageNamed:imageName];
    [returnArray addObject: image];
    ...
}

編集-宣言が修正されました

于 2009-05-08T12:40:50.730 に答える
4

追加はミューテーションであり、NSArrayは不変であるため、そのためにNSMutableArrayを使用する必要があります。

後でデータを入力することもできますがNSMutableArrayディスカッションについてはこちらを参照)、すぐに通常の古いアイテムにアイテムを追加することはありません。NSArrayNSArray

于 2009-05-08T12:40:08.970 に答える
3

これは、 NSMutableArrayを使用するのに良い時期でしょうか?

避けたいとおっしゃっていたのは知っていますが、こういう理由があることもあります。

于 2009-05-08T12:37:43.343 に答える
2

NSMutableArray パフォーマンスの低下を引き起こしていることがわかっている場合にのみ最適化することをお勧めしますが、そうである場合は、データを入力した後、可変配列からいつでも静的配列を作成できます。パフォーマンス ヒットの原因が のその後の使用によるものNSMutableArrayか、作成によるものかによって異なります。

私の推測では、これがアプリのパフォーマンスのボトルネックになることはありません。

于 2009-05-09T18:14:28.420 に答える