我有一个Objective-C对象的二维C数组。如何访问这些对象的成员?
id array[5][5];
array[0][0] = [[Ball alloc] init];
Ball类有两个成员:
int size;
CGPoint point;
如何访问存储在数组[0] [0]中的Ball对象的大小?请告诉我如何做到这一点。
提前致谢!
答案 0 :(得分:3)
根据哪个运行时(32位或64位)以及是否显式声明实例变量(size
和point
)或者让它们由运行时合成,您可能能够像在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);
这适用于任意数量的数组维度! 希望这会有所帮助。