Objective-C начальные значения созданного C-массива - PullRequest
0 голосов
/ 11 июня 2010

Я создаю массив, похожий на классический C (не NSArray или один из его дочерних элементов) - что-то вроде BOOL i[5];. И я хочу, чтобы все его значения были равны NO.

Прежде всего, я не нашел никакой информации о начальных значениях таких массивов (я знаю, что в классическом C они будут неопределенными, но точно не знаю о Objective-C. Я нашел информацию о классах и их внутренние данные [после выделения, без инициализации], но не о простых типах данных).

И второе, если я должен установить значения массива вручную - я должен использовать memset(...); или что-то другое?

Чтобы предотвратить возможные вопросы ... Я хочу использовать эту конструкцию в качестве массива временных логических флагов и не думаю, что здесь доказано использование чего-то вроде NSArray.

Ответы [ 2 ]

3 голосов
/ 11 июня 2010

Если BOOL i[5] является иваром класса ObjC, его содержимое будет инициализировано (memset -ed) равным 0.

Как описано в методе +alloc :

... память для всех остальных переменных экземпляра установлена ​​на 0.


Чтобы установить для массива все NO в других ситуациях,Вы могли бы использовать

memset(i, 0, sizeof(i));
0 голосов
/ 11 июня 2010

Даже если он равен 0, а не undef, как в C, правильная инициализация должна явно задавать все значения, поскольку вы не можете знать, равен ли NO 0 (это так, но гипотетически ...!), Поэтому просто:

for(j = 0; j < 5; j++) i[j] = NO;

может сделать работу.

...