如何在obj-c中合成C-array的getter和setter

时间:2010-07-13 01:39:54

标签: iphone objective-c cocoa

我有一个ObjC对象定义如下

@interface Fruit : NSObject
{
    int fruitsinbranch[4];
}
@property (readonly) int fruitsinbranch[4];
@end

然后在实现中我有通常的

@synthesize fruitsinbranch[4];

它不起作用。这样做的正确方法是什么?

(不,我不是要求其他方法来做事,比如NSArray等......我想要回答我提出的问题。)

更新:我的解决方案很蹩脚,但它确实有效。我创建了方法

-(int) fruitsinbranch:(int) i

这给了一个足够接近我想要的解决方案。

4 个答案:

答案 0 :(得分:2)

为C数组指定一个setter是没有意义的 - 在C中甚至没有“设置数组”这样的概念。你可以初始化数组,你可以访问它的元素,但你不能设置数组本身。

对于getter,我想不出无法工作的任何原因,但运行时只是不支持C数组作为属性。它只是没有内置 - 可能是因为数组不像C中的其他类型那样真正起作用,例如前面提到的事实,即没有设置它们。

您可以获得的最接近的是在初始化程序中指定malloc的只读int*属性。

答案 1 :(得分:2)

你最接近的是使用int*属性而不是合成getter:

 @interface Fruit : NSObject {
     int fruitsinbranch[4];
 }
 @property (readonly) int* fruitsinbranch;
 - (int *)fruitsinbranch { return fruitsinbranch; }

答案 2 :(得分:0)

不幸的是,Objective-C不支持具有C数组值的属性。

答案 3 :(得分:0)

指定readonly,然后要求它合成一个setter和getter(特别是setter)没有意义,尽管它应该有效。根据这个objective c property document,当你在readonly对象上明确设置一个setter时,你至少会得到一个编译器警告。

也许您可以尝试使用setter=getter=明确设置它们?我知道这会违反您的原始问题,但如果您的问题出在其他地方,则可能会引发错误。