如何使用Objective-C对象的二维C数组?

时间:2009-07-13 11:05:15

标签: c objective-c arrays multidimensional-array

我有一个Objective-C对象的二维C数组。如何访问这些对象的成员?

id array[5][5];
array[0][0] = [[Ball alloc] init];

Ball类有两个成员:

int size;
CGPoint point;

如何访问存储在数组[0] [0]中的Ball对象的大小?请告诉我如何做到这一点。

提前致谢!

3 个答案:

答案 0 :(得分:3)

根据哪个运行时(32位或64位)以及是否显式声明实例变量(sizepoint)或者让它们由运行时合成,您可能能够像在array[0][0]->size中一样直接访问它们。 然而,这不是一个好主意。它将在现代运行时断开,并且非常 Objective-C方式,并通过公开暴露类的实现细节来打破封装。

在Objective-C 2.0中,正确的做法是为每个要显示的属性声明一个属性。将以下内容添加到Ball的{​​{1}}声明:

@interface

@property (assign) int size; @property (assign) CGPoint point; 的{​​{1}}块中:

@implementation

您现在可以访问Ball这样的尺寸。编译器需要强制转换才能将点表示法识别为属性访问。如果您使用访问者方法(由@synthesize size; @synthesize point; 自动生成),则不需要:((Ball*)array[0][0]).size

答案 1 :(得分:2)

虽然它可能与您的问题不完全相关(也许您只是使用简化示例),但为什么不在这种情况下使用结构而不是对象?由于大小和点都是非对象,因此可能更有意义。

答案 2 :(得分:1)

你可以这样做:

@interface Moo : NSObject {
@public
    int age;
}

然后你可以毫无警告地做到这一点:

Moo *m = [[Moo alloc] init];
m->age = 16;
Moo *arr[4];
arr[0] = m;
printf("Age: %d",arr[0]->age);

你也可以做一些演员:

id arr[4];
arr[0] = m;
printf("Age: %d",((Moo *)arr[0])->age);

这适用于任意数量的数组维度! 希望这会有所帮助。