初始化作为C数组的Objective-C类ivar

rob*_*408 4 c arrays objective-c

我的Obj-C类中有一个ivar,它是一个C数组(我不想让它成为一个Obj-C属性).很简单.现在在我的类的init方法中,我想使用C数组简写init为这个数组添加一些值,如下面的.m所示.但我相当肯定这是通过相同的名称创建一个局部变量而不是初始化我的实例变量.我不能把我的数组init放在接口中,我不能在实现中声明一个ivar.我只是坚持做某种深层复制或者我还有其他选择吗?

在GameViewController.h中

#define kMapWidth 10
#define kMapHeight 10

@interface GameViewController : UIViewController
{
    unsigned short map[kMapWidth * kMapHeight];
}

@end
Run Code Online (Sandbox Code Playgroud)

在GameViewController.m中

- (id)init
{
    if ((self = [super init]))
    {
        unsigned short map[kMapWidth * kMapHeight] = { 
            1,1,1,1,1,1,1,1,1,1,
            1,0,0,0,0,0,0,0,0,1,
            1,0,0,0,0,0,0,0,0,1,
            1,0,0,0,0,0,0,0,0,1,
            1,0,0,0,0,0,0,0,0,1,
            1,0,0,0,0,0,0,0,0,1,
            1,0,0,0,0,0,0,0,0,1,
            1,0,0,0,0,0,0,0,0,1,
            1,0,0,0,0,0,0,0,0,1,
            1,1,1,1,1,1,1,1,1,1,
        };
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

Meh*_*ari 5

你是对的.你正在做的是初始化一个局部变量,遮蔽实例变量.您可以将本地数组初始化为memcpy实例变量:

static const unsigned short localInit[] = { 
        1,1,1,1,1,1,1,1,1,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,0,0,0,0,0,0,0,0,1,
        1,1,1,1,1,1,1,1,1,1,
};

memcpy(map, localInit, sizeof(localInit));
Run Code Online (Sandbox Code Playgroud)