如何使用C数组作为实例变量?

时间:2010-04-22 13:11:46

标签: objective-c

例如,我想将其存储在ivar中:

CGFloat color[4] = {red, green, blue, 1.0f};

所以我会把它放在我的标题中?

CGFloat color[];

我如何稍后为该家伙分配价值?我的意思是我无法改变它,对吧?

3 个答案:

答案 0 :(得分:2)

实例变量在分配时归零,因此您无法使用初始化变量。

你需要这样的东西:

// MyObject.h

@interface MyObject
{
    CGFloat color[4];
}
@end

// MyObject.m

@implementation MyObject

-(id) init
{
    self = [super init];
    if (self != nil)
    {
        color[0] = red;
        color[1] = green;
        color[2] = blue;
        color[3] = alpha;
    }
    return self;
}

答案 1 :(得分:0)

您需要将大小放入,以便保留足够的空间。

CGFloat color[4];

或者使用指向数组的指针,但这样做更有效,并且几乎不能代表众所周知的颜色。

答案 2 :(得分:0)

如果可以,最好使用NSColor对象。

但是,对于您的原始问题,我的第一个问题之一就是您要在哪里创建此阵列。如果你把它放在一个标题中你的意思是作为一个类的成员或作为一个全局数组,你当然可以做到这两个,但有一些严重的问题,将全局变量放入标题。如果你需要跟进,我可以更好地解释它。

如果它在一个类中,那么你可以像任何其他成员字段一样声明它。如果你说

CGFloat color[4];

然后数组的空间将分配给您的对象本身。你也可以使用

CGFloat *color;

或其道德等价物,指的是存储在对象之外的数组。但是,您确实需要适当地管理该存储。

在您暗示使用常量数组对象的位置并且以后无法更改它时,这很重要。这种情况可能会发生但很少见,因为第一种方法不会发生这种情况,你不会经常在野外看到它。

这里有关于角落案件的全部论文,我相信它没有帮助进入它。只需在你的对象中使用CGFloat color[4]就没关系了,当你看到它们会变成可变的东西时,你可以按照你期望的方式使用它们。