web-dev-qa-db-ja.com

Objective Cで空の配列を作成し、それに値を1つずつ割り当てるにはどうすればよいですか?

Javaでは、私はそれを行うことができます:

int[] abc = new int[10];
for(int i=0; i<abc.length; i++){
   abc[i] = i;
}

Objective Cで同様のことを実装するにはどうすればよいですか?

NSMutableArrayを使用していくつかの答えが表示されますが、これとNSArrayではwtが異なりますか?

18
Tattat

このようなものを試してください。

#import <foundation/foundation.h>
int main (int argc, const char * argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSMutableArray *myArray = [NSMutableArray array];
    [myArray addObject:@"first string"];
    [myArray addObject:@"second string"];
    [myArray addObject:@"third string"];
    int count = [myArray count];
    NSLog(@"There are %d elements in my array", count);
    [pool release];
    return 0;
}

ループは次のようになります。

NSString *element;
int i;
int count;
for (i = 0, count = [myArray count]; i < count; i = i + 1)
{
   element = [myArray objectAtIndex:i];
   NSLog(@"The element at index %d in the array is: %@", i, element);
}

CocoLab を参照してください

17
NSMutableArray* abc = [NSMutableArray array];
for (int i = 0; i < 10; ++ i)
   [abc addObject:[NSNumber numberWithInt:i]];
return abc;

ここに、

  • NSMutableArrayは、「可変」配列型です。定数配列のスーパータイプNSArrayもあります。 C++とは異なり、ObjCの配列は型指定されていません。任意のObjCオブジェクトをNSArrayに保存できます。
  • -addObject:配列の最後にObjCを追加します。
  • NSArrayはObjCしか格納できないため、最初に整数をNSNumberに「ボックス化」する必要があります。

これは実際にはC++コードに似ています

std::vector<int> abc;
for (int i = 0; i < 10; ++ i)
   abc.Push_back(i);
return abc;
10
kennytm

NSMutableArrayを使用していくつかの答えが表示されますが、これとNSArrayではwtが異なりますか?

NSArray is immutable:変更できません。 NSMutableArrayは変更可能なサブクラスであり、配列インターフェイスにメソッドを追加して、その内容を操作できるようにします。これは、Cocoa全体の多くの場所で見られるパターンです。NSStringNSSet、およびNSDictionaryは、すべて可変サブクラスを持つ不変オブジェクトである特に頻繁な例です。

これの最大の理由は効率です。あなたは、あなたの下から変わるかもしれないオブジェクトでは作ることができない不変のオブジェクトで、メモリ管理とスレッドセーフについての仮定をすることができます。

3
Sixten Otto