4

我正在为 iOS 编程,并使用 ARC。

我正在尝试使用 c 数组作为属性,但它报告错误。

@property (strong, nonatomic)NSString *mappingTable[70][254];

错误是"Property cannot have array or function type NSString *[70][254]"。我怎么解决这个问题?如何将 c-array 声明为属性?

注意:
这是一个二维数组,我认为只使用 c-array 会容易得多,所以我没有使用 NSArray。

4

4 回答 4

6

很惊讶这还没有被建议,但您可以将 c-array 存储在 NSData 对象中。我只是使用这种方法来存储一组帧。

@property (nonatomic) NSData *framesArray;


// Create and initialize your c-style frames array
CGRect frames[numberOfFrames];
...
self.framesArray = [NSData dataWithBytes:frames length:(sizeof(CGRect) * numberOfFrames)];


// To Access the property
NSUInteger arraySize = [self.framesArray length] / sizeof(CGRect);
CGRect *frames = (CGRect *) [self.framesArray bytes];
于 2014-03-21T16:16:14.677 回答
4

您不能以这种格式声明它。正如错误消息所述,您不能在属性声明中使用 C 样式的数组。

新的更短的数组语法使 NSArray 和 NSMutableArray 不那么痛苦。代替

[array objectAtIndex:3]

你可以简单地使用

array[3]

我认为从长远来看,使用 Objective-C 对象的好处将超过使用 C 样式数组的舒适度。

于 2013-03-04T12:58:19.070 回答
2

您不能将c/c++数组声明为属性,您可以使用objective-c NSArray/NSMutableArray属性,也可以声明 c++ 数组。

@property (strong,nonatomic)NSArray *mappingTable;

或者像这样声明纯c风格的字符数组

char mappingTable[70][224];
于 2013-03-04T12:59:08.693 回答
-1

如果您只打算将它用作班级的私有财产。然后保持简单。跳过 YourClass.h 文件。并像这样直接写在YourClass.m文件中。

//YourClass.m file


#import "YourClass.h"

@interface YourClass()

@property (strong,nonatomic)NSArray *mappingTable;

@end

@implementation YourClass
@synthesize mappingTable;
@end
于 2014-06-14T20:49:17.840 回答