要使用NSMutableArrays你需要做下面的代码创建二维数组:
// Create the 2D array
// array2D is created autoreleased. It should be retained somewhere
// to keep it around.
NSMutableArray* array2D = [NSMutableArray array];
// Add a NSMutableArray to array2D for each row
NSUInteger countRows = 8; // Or whatever value you need
for (NSUInteger i = 0; i < countRows; i++) {
NSMutableArray* row = [NSMutableArray array];
[array2D addObject:row];
}
请注意,您可以添加额外的行随时array2D。此外,每一行都以大小0开始 并且为空。可以添加不同数量的元件的每一行,因此 是锯齿状2D阵列,而不是更多的东西等,其将被固定大小 的矩阵(即,M行×N列)
为了在设定的值具体的行和列,你会做到以下几点:
NSUInteger rowIndex = 5;
NSUInteger columnIndex = 7;
NSNumber* value = [NSNumber numberWithInt:11];
// Get the 6th row
// Make sure there are 6 rows
NSUInteger countRows = array2d.count;
if (countRows >= (rowIndex + 1)) {
NSMutableArray* row = (NSMutableArray*)[array2d objectAtIndex:rowIndex];
// Get the 8th column
// Make sure there are 8 columns
NSUInteger countColumns = row.count;
if (countColumns >= (columnIndex + 1)) {
// Set the value
[row setObject:value atIndex:columnIndex];
}
}
您可以通过在的ObjectiveC对象包裹它们存储在NSMutableArrays C型。 可以使用NSNumber将数字转换为对象。 NSNumber也可以包含布尔值 值。指向C结构的指针可以使用NSValue对象进行包装。您也可以创建包装特定Cocoa类型的NSValue对象,例如: 。的CGRect。
int intValue = 1;
NSNumber* number = [NSNumber numberWithInt:intValue];
BOOL boolValue = NO;
NSNumber* number = [NSNumber numberWithBool:boolValue];
NSArrays不可修改。如果你需要添加或删除一个数组的对象,你应该是一个NSMutableArray。否则使用NSArray。
NSMutableArrays和NSArrays保留添加到它们的对象,并取得它们的所有权。当一个对象从NSMutableArray中被移除时,它会被释放以便清理它。当您释放不再需要的NSArray或NSMutableArray时,它们将清除已添加到数组中的任何对象。这使阵列中的对象的内存管理更容易。
您不能将无对象添加到NSArrays和NSMutableArrays。
NSMutableArray是动态调整大小,而C数组不是。这使得处理添加和删除对象到数组更容易。
我会为一组C类型使用C数组,例如,整数即固定大小和 ,其值在编译时是已知的:
int knownConstantValues[] = { 1, 2, 3 };
您可能需要使用C数组将数据传递到库用C API,例如OpenGL的。
希望这会有所帮助。
有没有这样的事情作为一个二维'NSArray',但它听起来像你正在从一个实现的假设到你试图解决的问题。如果从另一个方向开始(即通过描述问题空间),您可能会得到更有用的答案。 – jlehr
那么我的目标是创建一个3行3列的2维数组,我可以在其中输入布尔类型的数据并检索值,这是否更好解释? –
一个更有意义的问题可能是何时应该使用C数组而不是NSArray?嵌套数组是用于n维数组的常用习惯用法,NSValue用于存储基本类型。 –