初始化数字的NSArray

时间:2012-02-25 02:23:45

标签: objective-c ios nsarray nsnumber

我有一个只需要数字的非可变数组。我该如何初始化它?

我现在就像下面一样,但我认为必须有一个更好的方法。我们可以像在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 个答案:

答案 0 :(得分:7)

尚未,但很快:

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

更新:新语法为:

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

@[]创建一个数组,@(number)生成一个可以进入数组的NSNumber。

答案 1 :(得分:5)

如果它是不可变的并且只包含数字,则直接使用C数组。在Objective-C中使用C数组没有任何问题,在您的情况下,NSArray只是不需要的开销。

答案 2 :(得分:-1)

您可以向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的建议......