Objective c 如何将c型数组用作ivar?

Objective c 如何将c型数组用作ivar?,objective-c,arrays,properties,directive,Objective C,Arrays,Properties,Directive,在我的程序中,我需要一个好的老式二维整数数组,但无论我如何尝试将其声明为ivar,然后使用@property/@synthesis,我都会收到一个或另一个编译器的抱怨 我宣布 int spotLocations[10] [10] 作为一个ivar 这很有效,但是@property/@synthesis过程永远无法通过测试。你不能这样做。数组变量在C中永远不能是左值,这意味着您永远不能声明返回数组的函数,因为不可能将函数的结果赋给数组变量(因为它不能是左值) 属性只是声明返回类型的函数的一种简

在我的程序中,我需要一个好的老式二维整数数组,但无论我如何尝试将其声明为ivar,然后使用@property/@synthesis,我都会收到一个或另一个编译器的抱怨

我宣布

int spotLocations[10] [10] 
作为一个ivar


这很有效,但是@property/@synthesis过程永远无法通过测试。

你不能这样做。数组变量在C中永远不能是左值,这意味着您永远不能声明返回数组的函数,因为不可能将函数的结果赋给数组变量(因为它不能是左值)

属性只是声明返回类型的函数的一种简写方式。因为函数永远不能返回数组,所以永远不能声明作为数组的属性

如果您确实需要像这样移动矩阵,可以将其包装在结构中,结构可以是左值:

typedef struct {
  int value[10][10];
} matrix;

当然,访问位置有点复杂,您必须使用

spotLocations.value[x][y]

将实例变量声明为指针,然后在init方法中动态创建数组。将assign参数用于@property声明

分配:

spotLocations = malloc(100 * sizeof(int));
通过执行以下操作访问列和行:

int aValue = spotLocations[x + y * 10];

记住在使用完指针后释放它。

我认为你应该指定你所说的编程语言。对于熟悉Objective-C的人来说,这显然是Objective-C。
int aValue = spotLocations[x + y * 10];