我知道我可以用@[@"foo", @"bar"]
或NSDictionary
與@{@0 : @"foo", @1 : @"bar"}
創建NSArray
。是否有可變集合的文字語法?
是否有創建NSMutableArray
或NSMutableDictionary
的字面語法?
我知道我可以用@[@"foo", @"bar"]
或NSDictionary
與@{@0 : @"foo", @1 : @"bar"}
創建NSArray
。是否有可變集合的文字語法?
是否有創建NSMutableArray
或NSMutableDictionary
的字面語法?
否如同沒有創建NSMutableString
的語法一樣。可變對象不是特別適合字面值。
不得不不同意最後一句話。例如,用Python進行編程,默認情況下,集合的創建是字面和可變的。它可以非常方便。 –
@JoshCaswell:Python甚至有不可變的集合嗎? –
是的,有一些名爲[「tuples」](http://docs.python.org/tutorial/datastructures.html#tuples-and-sequences)是不可變的。 '>(1,2,3)#tuple(immutable array)''> [1,2,3]#list(可變數組)' –
沒有一個內置的方式,但我只是平時使用mutableCopy
這樣的:
NSMutableArray *array = [@[ @"1", @"2", @"3" ] mutableCopy];
但是,有沒有創造一個NSMutableArray或一個NSMutableDictionary文字的語法?
號最好的選擇:
[@[ @"foo", @"bar"] mutableCopy]
如果你有一個嵌套的字面數組和字典,你可以通過NSJSONSerialization
會變成一個完全可變的版本。例如:
NSArray* array = @[ @{ @"call" : @{ @"devices" : @[ @"$(devices)" ] } } ];
NSData* data = [NSJSONSerialization dataWithJSONObject:array
options:0
error:nil];
NSJSONReadingOptions options = NSJSONReadingMutableContainers |
NSJSONReadingMutableLeaves;
NSMutableArray* mutableArray = [NSJSONSerialization JSONObjectWithData:data
options:options
error:nil];
這有點繞道,但至少你不必自己寫代碼。好的是,NSJSONSerialization
是非常快的。
呃兄弟,JSONKit速度更快。由5x。另外,這太迂迴了。只要使用-mutableCopy,那麼你可以選擇使用-autorelease。 –
@NathanielSymer來吧夥計:兩歲的[JSONKit](https://github.com/johnezang/JSONKit)自述文件 - 保存好的東西btw--本身說它只有25% - 40%的速度。而['-mutableCopy'只做一個淺拷貝](http://stackoverflow.com/questions/8661770/does-mutablecopy-make-contained-objects-mutable)。唯一的辦法是做一些'迂迴'。 –
你也可以這樣做:[[NSMutableArray alloc] initWithArray:@ [@「A」,@「B」]]。對於downvote感到抱歉,但序列化和反序列化是瘋狂的,並不適用於許多類型的對象。 – kritzikratzi
是的。但不完全。看看這個;
NSMutableArray *list = [@[] mutableCopy];
這產生了非可變數組@[]
並調用mutableCopy
返回一個NSMutableArray *
。代替@[]
,你可以給任何數組字面量。
您是否知道使用此代替longhand引起的任何問題? –
只要不要忘記它的'NSDictionary * dictionary = @ {@「key」:@「value」};',可能會讓你誤解它。與':objectsWithKeys'不同。 –