我有一个只需要数字的非可变数组。我该如何初始化它?
我现在就像下面一样,但我认为必须有一个更好的方法。我们可以像在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的新手并且在网上四处看看我看到了相互矛盾的答案。
答案 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的建议......