2016-01-22 73 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然後複製它。所以短代碼/可讀性有一個(非常)輕微的性能折衷。