2016-01-22 71 views
-1

我在学习Obj-C,这只是语法/语言问题。Objective C使用值初始化NSMutableArray

考虑以下代码:

NSMutableArray *attributes = [[NSMutableArray alloc] init]; 
    [attributes addObject:@"H:S"]; 
    [attributes addObject:@"H:W"]; 
    [attributes addObject:@"H:AGR"]; 
    [attributes addObject:@"H:TPC"]; 
    [attributes addObject:@"H:P"]; 
    [attributes addObject:@"H:TI"]; 
    return attributes; 

是否有任何短语法来初始化与预设值阵列?

回答

1

你可以使用这个简写语法

NSArray *attributes = @[@"H:S",@"H:W",@"H:AGR",@"H:TPC",@"H:P",@"H:TI"]; 

,如果你需要NSMutableArray你可以做到这一点

NSMutableArray *attributes = [@[@"H:S",@"H:W",@"H:AGR",@"H:TPC",@"H:P",@"H:TI"] mutableCopy]; 

这将复制整个的NSMutableArray和复制的所有项目,这将是位性能问题,如果有是很多项目,第三个选项在下面。

NSMutableArray *attributes = [[NSMutableArray alloc] initWithObjects:@"H:S", @"H:W", @"H:AGR", @"H:TPC", @"H:P", @"H:TI", nil]; 
+0

是否有使用可变副本和基本init之间的任何perofrmance差异? –

+0

在第二种情况下会出现性能问题,因为它会首先创建一个数组,然后它会将这些项目复制到另一个mutableArray,您也可以使用第三个选项,它提供init方法参数中的所有项 –

0

可以使用initWithObjects做到这一切在init

NSMutableArray *attributes = [[NSMutableArray alloc] initWithObjects:@"H:S", @"H:W", @"H:AGR", @"H:TPC", @"H:P", @"H:TI", nil]; 

,或者你可以用速记做到这一点:

NSMutableArray *attributes = @[@"H:S", @"H:W", @"H:AGR", @"H:TPC", @"H:P", @"H:TI"].mutableCopy 

到第二个缺点是,它首先创建一个NSArray然后复制它。所以短代码/可读性有一个(非常)轻微的性能折衷。