Objective c 类特定数组

Objective c 类特定数组,objective-c,Objective C,我正在制作一个简单的opengl引擎,我需要能够为每个类存储一系列整数,包含动画帧 示例:我创建了类Dog。狗有3个动画,由多个帧索引组成,表示帧在纹理图集中的位置。在类文件中,我想如下定义这些动画: const int animations[3] = { {1,2,3}, //walk {4,5,6}, //jump {1,7,8,9,10,11} //take a wiz } @implementation... 这是ofc,不是合适的Obj-C,但有没有类似的方

我正在制作一个简单的opengl引擎,我需要能够为每个类存储一系列整数,包含动画帧

示例:我创建了类Dog。狗有3个动画,由多个帧索引组成,表示帧在纹理图集中的位置。在类文件中,我想如下定义这些动画:

const int animations[3] = {
    {1,2,3}, //walk
    {4,5,6}, //jump
    {1,7,8,9,10,11} //take a wiz
}

@implementation...
这是ofc,不是合适的Obj-C,但有没有类似的方法? 狗的每个实例都有相同的动画,所以我不想浪费内存,把动画存储在实例变量中。如果可能的话,我想避免使用NSArray的


有没有一种方法可以在类级别存储这样的二维可变长度整数数组

可以在任何级别存储二维数组,但行长度可变的二维数组通常不太有用,除非在特殊情况下


无论如何,假装Objective-C有类变量的传统方法只是在类的实现文件中创建一个静态变量,并创建类方法来访问它。

在.m文件中声明一个静态全局变量,就像在C中一样。如果需要在类之外访问它,请创建一个类方法(例如,
+(const int*)动画
)用作访问器。

您当然可以声明int的静态二维数组。例如:

static int animations[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
因为它被声明为“静态”,所以在声明它的源文件的范围外,
动画将不可见,并且只有一个数组副本

诀窍是,C数组必须是矩形的,并且您的示例显示了不同宽度的行

为此,可以使用指针数组:

static int walk[] = {1,2,3};
static int run[] = {4,5,6};
static int wiz[] = {1,2,3,4,5,6};
static int *animations[3] = {walk,run,wiz};

(当然,在这种情况下,您需要一些其他方法来知道何时到达一行的末尾,因为它们的长度并不完全相同。例如,可能一行的末尾标记了一个“0”或“-1”值。)

这就成功了!但现在,我想知道每个动画的长度。执行动画大小[0]简单地返回8,我猜指针地址是8位长?如果我做sizeof walk,我得到24。有没有办法得到指针指向的数组的大小而不是指针本身?没有。C中的数组不知道它的长度;你必须自己跟踪。一种方法(如答案中所建议的)是使用“哨兵”值,例如-1(假设-1不是有效的帧索引)。或者,将数组包装在某种记录长度的对象中(在这一点上,您正在重新发明
NSArray
,因此可能您应该使用它:-)。是的,我想知道,只是NSArray的语法太脏了。[[NSArray alloc]initWithObjects:[NSNumber numberWithInt:0],[NSNumber numberWithInt:1],[NSNumber numberWithInt:2],nil]。vs int arr[3]={0,1,2}有点破坏交易:/sentinel value thingie对Hugh来说似乎是一个足够好的解决方案,谢谢!