如何使用c型阵列作为ivar?

时间:2009-12-02 16:34:10

标签: objective-c arrays properties directive

我的程序中需要一个老式的2维整数数组,但无论我如何尝试将其声明为ivar,然后使用@ property / @ synthesize,我得到一个编译器投诉或其他。

我宣布

int spotLocations[10] [10] 

作为一个伊娃。

那么有用,但是@ property / @ synthesize过程永远不会通过。

2 个答案:

答案 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];

记得在完成指针后释放()指针。