Objective C使用值初始化NSMutableArray
问题描述:
我在学习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;
是否有任何短语法来初始化与预设值阵列?
答
你可以使用这个简写语法
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];
答
可以使用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
然后复制它。所以短代码/可读性有一个(非常)轻微的性能折衷。
是否有使用可变副本和基本init之间的任何perofrmance差异? –
在第二种情况下会出现性能问题,因为它会首先创建一个数组,然后它会将这些项目复制到另一个mutableArray,您也可以使用第三个选项,它提供init方法参数中的所有项 –