web-dev-qa-db-ja.com

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を使用する必要がありますか?

15
Thanks

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

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

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

28
Alnitak

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

後で、入力されたNSMutableArrayNSArrayにすることはできますが( 説明はこちらを参照 )、通常の古いNSArray 近いうちに。

4
Kris

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

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

3
Wally Lawless

NSMutableArrayisがパフォーマンスに影響を与えることがわかっている場合にのみ最適化することをお勧めしますが、そうである場合は、データを入力した後、可変配列からいつでも静的arayを作成できます。パフォーマンスへの影響が、その後のNSMutableArrayの使用によるものなのか、それとも単に作成したものなのかによって異なります。

私の推測では、これがアプリのパフォーマンスのボトルネックになることはないでしょう。

2
Rog