2

我需要使用类似 C 数组的东西:

MyStruct theArray[18][18];

但我不能将其定义为属性:

@property (nonatomic) MyStruct theArray[18][18];

那么我必须:

@implementation MyClass
{
    MyStruct theArray[18][18];
}

但是,就现代 Objective C 指南而言,这很好吗?

谢谢

更新:

我知道我可以将结构定义为类并使用 NSMutableArray 来处理它,但在我的情况下使用 C 数组更方便,主要关注的是编码指南和内存问题,因为我不分配或释放 theArray[ 18][18],不确定它的生命周期是什么,我正在使用 ARC。

4

3 回答 3

2

属性不能是数组类型,而公共实例变量没有提供足够的封装。一种更类似于 Objective C 的方法是定义一个私有 2D 数组,以及一对方法或一个返回访问它的指针的方法 - 大致如下:

// For small structs you can use a pair of methods:
-(MyStruct)getElementAtIndexes:(NSUInteger)i and:(NSUInteger)j;
-(void)setElementAtIndexes:(NSUInteger)i and:(NSUInteger)j to:(MyStruct)val;

// For larger structs you should use a single method that returns a pointer
// to avoid copying too much data:
-(MyStruct*)elementAtIndexes:(NSUInteger)i and:(NSUInteger)j;
于 2013-02-02T11:16:38.577 回答
1

改用指针怎么样?

@property (nonatomic) MyStruct **theArray;
于 2013-02-02T11:02:40.243 回答
0

到目前为止的答案都很棒。. . 这里还有两个选择:

1.有点hacky

(我不确定这是否需要Objective-C++)

您可以将数组创建为公共属性,如下所示:

@interface MyClass
{
    @public:
    MyStruct theArray[18][18];
}
@end

然后按如下方式访问它:

myClass->theArray

2. 返回一个结构

虽然不能返回 C 样式的数组,但可以返回结构:

typedef struct
{
     CGPoint textureCoordinates[kMaxHillVertices];
     CGPoint borderVertices[kMaxBorderVertices];
} HillsDrawData;


@interface Hills : NSObject
{
    HillsDrawData _drawData;
}


- (HillsDrawData)drawData; //This will get cleaned up when the class that owns it does.

@end
于 2013-02-02T12:01:48.503 回答