如何在Objective-C中创建一个空数组,并逐个为其赋值?

19

在Java中,我可以这样做:

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

我该如何在Objective C中实现类似的东西?

我看到有些答案使用NSMutableArray,那么它和NSArray有什么不同吗?

3个回答

18

试试像这样。

#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


这并没有回答如何将值分配给特定的索引,只是说明了如何从中读取值。 - Tim Bodeit

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

这里,

  • NSMutableArray是一种“可变”数组类型。还有一个常量数组超类型NSArray。与C++不同,ObjC的数组没有类型限制。你可以在NSArray中存储任何ObjC对象。
  • -addObject:将一个ObjC追加到数组末尾。
  • 由于NSArrays只能存储ObjC对象,因此您需要首先将整数封装成NSNumber。

实际上,这更类似于C++代码。

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

3

我看到有些答案使用了NSMutableArray,那么这个和NSArray有什么不同呢?

NSArray不可变的:它不能被更改。NSMutableArray是一个可变的子类,并添加了方法来允许对其内容进行操作。在Cocoa中,这是许多地方都看到的模式:NSStringNSSetNSDictionary都是特别频繁的例子,它们都是不可变对象,有可变的子类。

这样做的最大原因是效率。您可以对不可变对象做出内存管理和线程安全的假设,而对于可能在您下面更改的对象则不行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接