如何在Objective-C中声明一个stringtypes的二维数组?

如何在Objective-C中声明一个stringtypes的二维数组?

首先,你可以考虑使用一个类来保存你的内部数组的string,或者从一个plist文件中加载它(在这个文件中很容易制作一个二维数组的string)。

对于直接声明,您有几个选项。 如果你想使用NSArray,你必须手动创build这样的结构:

NSMutableArray *strings = [NSMutableArray array]; for(int i = 0; i < DESIRED_MAJOR_SIZE; i++) { [strings addObject: [NSMutableArray arrayWithObject:@"" count:DESIRED_MINOR_SIZE]]; } 

或者,使用数组文字,你可以得到像这样的不可变版本:

 NSArray *strings = @[ @[ @"A", @"B", @"C" ], @[ @"D", @"E", @"F" ], @[ @"G", @"H", @"I" ] ] 

你可以像这样使用它:

 NSString *s = [[strings objectAtIndex:i] objectAtIndex:j]; 

这对初始化有些尴尬,但是如果你想使用NSArray方法,这是一条路。

另一种方法是使用C数组:

 NSString *strings[MAJOR_SIZE][MINOR_SIZE] = {0}; // all start as nil 

然后像这样使用它:

 NSString *s = strings[i][j]; 

这样做不那么笨拙,但是在将数据放入数组并将其从数组中删除时,必须小心保留/复制释放值。 (除非你使用ARC,当然!)NSArray会为你做这个,但是用C风格的数组,你需要做这样的事情来replace一个数组:

 [strings[i][j] release]; strings[i][j] = [newString retain]; 

另一个区别是你可以把nil放在C风格的数组中,而不是NSArrays – 你需要使用NSNull。 另外看看堆栈溢出问题cocoa:内存pipe理与NSString有关NSString内存pipe理的更多信息。

如果你想声明和初始化一个二维数组的string,你可以这样做:

 NSArray *myArray = [NSArray arrayWithObjects: [NSArray arrayWithObjects:@"item 1-1", @"item 1-2", nil], [NSArray arrayWithObjects:@"item 2-1", @"item 2-2", nil], [NSArray arrayWithObjects:@"item 3-1", @"item 3-2", nil], [NSArray arrayWithObjects:@"item 4-1", @"item 4-2", nil], nil]; 

这有一个给你一个不可改变的数组的好处。

我可能是自我宣传,但我写了一个包装NSMutableArray先前易于使用作为二维数组。 它在GitHub上作为CRL2DArray在这里提供。 https://github.com/tGilani/CRL2DArray