在 C 中,我们可以执行以下操作来创建二维数组:
int intArray[10][10];
在 C99 中,我们可以创建一个 VLA:
size_t col = 10;
size_t row = 10;
int array[row][col];
在 Objective-C 的方法中,我可以创建一个包含 id
的二维数组,如下所示:
id genObjectArray[10][10];
是否可以在 Objective-C 中创建二维数组 ivar?
以下是我尝试过的:
@interface myClass ()
{
id objArray[][];
//This doesn't work, unless I specific size.
//I want to do this, so that I could specific the size later during
//runtime
}
在 C 中,我可以执行以下操作并稍后在 block 范围内为二维数组分配空间:
int **array;
int *elements;
我也可以在 Objective-C 中做同样的事情,但是当我使用 id
或其他对象类型时会出现问题;换句话说,以下内容无效:
id **array;
id *elements;
因此,我的问题是,是否可以将 C 样式的 2D 数组声明为包含 id
s 的 ivar?
我知道我们可以使用普通的 NS(Mutable)Array
;但这仅用于教育目的。
你不能这样做。对于 C99 VLA,数组所需的空间在数组声明时分配。对于 ivar,执行此操作的类似时间是分配和初始化对象时,但 Objective C 中不支持执行此操作。您需要对对象构造函数的功能有更严格的定义(更像 Java 的构造函数,而不是 Objective C 的初始化程序)。
你能得到的最接近的应该是这样的:
@interface myClass () {
id * objArray;
}
-(instancetype)initWithRowsize_t)row colsize_t)col {
self = [super init];
if (self) {
objArray = calloc(row * col * sizeof(id));
}
return self;
}
-(void)dealloc {
free(objArray);
}
在这种情况下,您将 ivar 声明为指针并自己管理存储(以及多维数组的步幅)。
显然,NSArray
在所有可能的方面都更好。
关于ios - C 样式 2D 数组作为 ivar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30836634/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |