我的程序中需要一个老式的2维整数数组,但无论我如何尝试将其声明为ivar,然后使用@ property / @ synthesize,我得到一个编译器投诉或其他。
我宣布
int spotLocations[10] [10]
作为一个伊娃。
那么有用,但是@ property / @ synthesize过程永远不会通过。
答案 0 :(得分:4)
你不能这样做。数组变量在C中永远不能是lvalues,这意味着你永远不能声明一个返回数组的函数,因为将函数的结果赋值给一个数组变量是不可能的(因为它不能是一个左值)。 / p>
属性只是声明返回类型的函数的简便方法。由于函数永远不会返回数组,因此您永远不能声明属于数组的属性。
如果你绝对需要像这样移动矩阵,你可以将它包装在一个结构中,它可以是左值:
typedef struct {
int value[10][10];
} matrix;
...
@property matrix spotLocations;
当然,访问这些地点有点复杂,你必须使用
spotLocations.value[x][y]
答案 1 :(得分:2)
将实例变量声明为指针,然后在init方法中动态创建数组。使用@property声明的assign参数。
分配:
spotLocations = malloc(100 * sizeof(int));
通过执行以下操作来访问列和行:
int aValue = spotLocations[x + y * 10];
记得在完成指针后释放()指针。