Инициализация NSArray чисел - PullRequest
4 голосов
/ 25 февраля 2012

У меня есть неизменяемый массив, который должен иметь только цифры. Как мне инициализировать это?

Прямо сейчас у меня это так, но я думаю, что должен быть лучший путь. Можем ли мы сделать это как в C ++? Нечто подобное int list[5] = {1,2,3,4,5}; повлияет ли это на приложение?

myArray = [[NSArray alloc] initWithObjects: [NSNumber numberWithInt:1], [NSNumber numberWithInt:2], [NSNumber numberWithInt:3], nil];

Кроме того, если бы мне понадобился массив массивов только с числами, как бы это выглядело? Я новичок в obj-c и смотрю в Интернете. Я видел противоречивые ответы.

Ответы [ 3 ]

7 голосов
/ 25 февраля 2012

Пока нет, но скоро:

http://blog.ablepear.com/2012/02/something-wonderful-new-objective-c.html

Обновление: новый синтаксис:

@[ @(20), @(10) ]

@[] создает массив, @(number) создает NSNumber, который может идти в массив.

5 голосов
/ 25 февраля 2012

Если он не изменяемый и содержит только числа, просто используйте массив C напрямую.В Objective-C нет ничего плохого в использовании массивов C, и в вашем случае NSArray - просто ненужные накладные расходы.

0 голосов
/ 25 февраля 2012

Вы можете добавить категорию в NSArray:

@implementation NSArray ( ArrayWithInts )

+(NSArray*)arrayWithInts:(const int[])ints count:(size_t)count
{
    assert( count > 0 && count < 100 ) ;    // just in case

    NSNumber * numbers[ count ] ;
    for( int index=0; index < count; ++index )
    {
        numbers[ index ] = [ NSNumber numberWithInt:ints[ index ]] ;
    }

    return [ NSArray arrayWithObjects:numbers count:count ] ;
}
@end

countof() выглядит так:

#define countof(x) (sizeof(x)/sizeof(x[0]))

Используйте вот так:

const int numbers[] = { 20, 10, 5, 2, 1, 0 } ;  
NSArray * array = [ NSArray arrayWithInts:numbers count:countof(numbers) ] ) ;

Или вы можете просто воспользоваться предложением @ CRD выше ...

...