Tat*_*tat 4 arrays objective-c multidimensional-array
我曾经是一个Java程序员,数组需要第一次声明,如下所示:
int[] anArray; // declares an array of integers
anArray = new int[10]; // allocates memory for 10 integers
Run Code Online (Sandbox Code Playgroud)
我不知道Objective C,NSMutableArray是否也给了我这个能力.实际上,我想制作一个10*10阵列.提前.我试着这样做:
myArray = [[NSMutableArray alloc] initWithCapacity:10];
for (int i=0; i<10; i++) {
myArray[i] = [[NSMutableArray alloc] initWithCapacity:10];
}
Run Code Online (Sandbox Code Playgroud)
但它发生错误,告诉我不兼容的类型分配.
ken*_*ytm 10
容量字段很少有用.无论如何,阵列将按需扩展.
容量字段只是告诉数组你可以使用多少内存.数组的长度仍为0.
但是你可以从空增长数组:
for (int i = 0; i < 10; ++ i)
[myArray addObject:…];
Run Code Online (Sandbox Code Playgroud)要读取和写入NSMutableArray中的元素,您需要:
id x = [array objectAtIndex:i]; // x = array[i];
[array replaceObjectAtIndex:i withObject:y]; // array[i] = y;
Run Code Online (Sandbox Code Playgroud)
你不能直接下标NSArray.
您的代码有内存泄漏.与Java不同,ObjC不使用GC,除非您明确启用它(并且iPhoneOS上的ObjC没有GC).ObjC通过手动引用计数来管理内存.基本上你需要确保你不拥有的东西的引用数量在这个过程中没有变化.有关详细信息,请参阅http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html.
在你的情况下,[[NSMutableArray alloc] …];创建一个ref count +1对象,然后赋值将接管数组,这意味着你不再拥有它,但ref count不平衡为0,所以这个内存将不正确释放.您需要使用方便的方法,例如[NSMutableArray array…]创建ref count为0的对象.
NSArray只能存储ObjC对象.int在C(ObjC)中是一个原始的,并且不能存储到NSArray中.你必须框入一个NSNumber的通过[NSNumber numberWithInt:0].您可以使用返回整数-intValue.
总而言之,您的代码需要修改为:
-(NSMutableArray*)get10x10Array {
NSMutableArray* arr = [NSMutableArray array];
for (int i = 0; i < 10; ++ i) {
NSMutableArray* subarr = [NSMutableArray array];
for (int j = 0; j < 10; ++ j)
[subarr addObject:[NSNumber numberWithInt:0]];
[arr addObject:subarr];
}
return arr;
}
Run Code Online (Sandbox Code Playgroud)但是ObjC是C的超集.你可以使用普通的10x10 C阵列.
int arr[10][10];
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
19849 次 |
| 最近记录: |