我曾经是一名Java程序员,数组需要在第一次声明时声明,如下所示:
int[] anArray; // declares an array of integers
anArray = new int[10]; // allocates memory for 10 integers我不知道Objective C,NSMutableArray是否也给了我这个能力。实际上,我想做一个10*10的数组。在太赫兹之前。我试着这样做:
myArray = [[NSMutableArray alloc] initWithCapacity:10];
for (int i=0; i<10; i++) {
myArray[i] = [[NSMutableArray alloc] initWithCapacity:10];
}但是它发生了错误,告诉我不兼容的类型赋值。
发布于 2010-04-06 14:24:48
for (int i= 0;i< 10;++ i) myArray addObject:…;
id x= array objectAtIndex:i;// x= arrayi;array replaceObjectAtIndex:i withObject:y;// arrayi = y;
您不能直接为NSArray下标。
在您的例子中,[[NSMutableArray alloc] …];创建了一个引用计数为+1的对象,然后赋值将接管数组,这意味着您不再拥有它,但是引用计数没有平衡到0,所以这个内存将不会被正确释放。您需要使用方便的方法(如[NSMutableArray array…] )创建引用计数为0的对象。
int (ObjC)是一个原语,不能存储到NSArray中。你必须用[NSNumber numberWithInt:0]把它装箱成一个NSNumber。你可以用-intValue.
-( NSMutableArray* )get10x10Array { NSMutableArray* arr = NSMutableArray数组;for (int i= 0;i< 10;++ i) { NSMutableArray * subarr =NSMutableArray数组;for (int j= 0;j< 10;++ j) [subarr addObject:NSNumber numberWithInt:0];arr addObject:subarr;} return arr;}
int arr10;
发布于 2010-04-06 13:15:16
您想要一个10x10的数组--什么数组?
myArray = [[NSMutableArray alloc] initWithCapacity:10];
for (int i=0; i<10; i++) {
myArray[i] = [[NSMutableArray alloc] initWithCapacity:10];
},但它发生错误,告诉我不兼容的类型赋值。
因为你不能像那样赋值给myArray。myArray是一个表示数组数据结构的对象。它是而不是一个C数组。
如果您想要一个原始数据类型的10x10数组,可以像在C:
int myArray[10][10];发布于 2010-04-06 13:01:17
你需要NSMutableArray +arrayWithCapacity:
请注意,设置初始容量只是一种优化-可变数组根据需要进行扩展。
编辑:要做10x10的情况,
myArray = [[NSMutableArray alloc] initWithCapacity:10];
for (int i=0; i<10; i++) {
NSMutableArray *subArray = [NSMutableArray arrayWithCapacity:10];
[myArray addObject:subArray];
for (int j = 0; j<10; j++) {
[subArray addObject:[NSNumber numberWithInt:0]];
}
}备注:
数组下标保留了添加到数组中的对象,因此没有必要保留可以添加到数组中的下标对象(而不是像“subArray
NSNumber numberWithInt:
objectAtIndex:和replaceObjectAtIndex:withObject:等方法从下标中获取/设置值,而不是数组下标([])语法请参阅NSArray和NSMutableArray的苹果参考资料
https://stackoverflow.com/questions/2582699
复制相似问题