Как использовать массив C в качестве переменной экземпляра? - PullRequest
1 голос
/ 22 апреля 2010

Например, я хочу сохранить это в иваре:

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

так я бы поместил это в заголовок?

CGFloat color[];

Как бы я назначил значения этому парню позже? Я имею в виду, я не могу это изменить, верно?

Ответы [ 3 ]

2 голосов
/ 22 апреля 2010

Переменные экземпляра обнуляются при распределении, поэтому вы не можете использовать с ними инициализаторы.

Вам нужно что-то вроде этого:

// 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;
}
0 голосов
/ 22 апреля 2010

Вам лучше использовать объект NSColor, если можете.

Однако, к вашему первоначальному вопросу, один из моих первых вопросов - где вы хотите создать этот массив? Когда вы говорите, поместите его в заголовок, вы имеете в виду как член класса или как глобальный массив, вы, безусловно, можете сделать и то и другое, однако есть некоторые серьезные проблемы с размещением глобалов в заголовках. Если вам нужно, проследите, и я смогу объяснить это лучше.

Если он находится в классе, вы можете просто объявить его как любое другое поле члена. Если вы скажете

CGFloat color[4];

тогда пространство для массива выделяется в самом вашем объекте. Вы также можете просто использовать

CGFloat *color;

или его моральный эквивалент для обозначения массива, хранящегося вне объекта. Однако вам необходимо правильно управлять этим хранилищем.

Это имеет значение в том случае, если вы намекнули на то, где вы используете постоянный массив, и не можете позже изменить его. Такое может случиться, но редко, так как это не может произойти при первом подходе, в дикой природе вы не видите его очень часто.

Здесь есть целая диссертация по угловым случаям, я уверен, что это не поможет в этом разобраться. Просто используйте CGFloat color[4] в вашем объекте, и это не будет иметь значения, к тому времени, как вы увидите, что они будут изменяемыми, и вы можете просто использовать их так, как вы ожидаете.

0 голосов
/ 22 апреля 2010

Вам нужно указать размер, чтобы зарезервировать достаточно места.

CGFloat color[4];

Или используйте указатель на массив, но это более трудоемко и вряд ли лучше для представления чего-либо, такого же известного как цвет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...