從xcode4.4開始,LLVM4.0編譯器為Objective-C添加一些新的特性。建立數組NSArray,雜湊表NSDictionary, 數值 對象NSNumber時,可以像NSString的初始化一樣簡單方便。媽媽再也不擔心程式寫得手發酸了。
有興趣的朋友可以關注LLVM編譯器的相關文檔:http://clang.llvm.org/docs/ObjectiveCLiterals.html
關於NSDictionary和NSNumber的例子來自:http://cocoaheads.tumblr.com/post/17757846453/objective-c- literals-for-nsdictionary-nsarray-and
I. NSArray
首先是非常常用的NSArray,NSMutableArray。NSArray是一個初始化後就固定的靜態數組。如果想對數組的元素進行 插入,刪除,更新等操作,就得使用Objective-C 的動態數組NSMutableArray。
在LLVM4.0之前,NSArray的初始化方法如下。注: 以下的方法在LLVM4.0之後也可以繼續使用。
//LLVM4.0之前 NSArray的初始化
NSArray *oldOne = [NSArray arrayWithObjects:@"1st", @"2nd", @"3th", nil];
// 取得數組第2個值
NSString *s = [oldOne objectAtIndex:1];
在LLVM4.0之後,NSArray的初始化方法如下。
NSArray *newOne =@[@"1st", @"2nd", @"3th”];
// 取得數組第2個值
NSString *s = newOne[1];
特別要說一下NSMutableArray。LLVM4.0之前,如果你要更新數組的某個元素,一般使用下面的方法。
//LLVM4.0之前 NSMutableArray的初始化
NSMutableArray *oldMutable = [NSMutableArray arrayWithArray: old];
[mutable replaceObjectAtIndex:1 withObject:@"disposed"]; //更新某個元素
在編寫一些常用演算法時,下面的特性導致編寫起來有一點麻煩。
/*想更新NSMutableArray的某個元素?請先初始化這個元素*/
NSMutableArray *oldMutable = [[NSMutableArray alloc] init]];
/*必須如下給每個元素賦一個初值,否則exception會發生
for (int h = 0; h < 5; h++) {
[oldMutable addObject:@"1"];
}
@try{
[mutable replaceObjectAtIndex:1 withObject:@"disposed"];
}
@catch(NSException *exception){
NSLog(@“%@“, [exception description]);
}
這而LLVM4.0簡化了這一個過程,可以用如下方式簡單完成。
//LLVM4.0之後
NSMutableArray *newMutable = [NSMutableArray alloc] init];
newMutable[2] = @"myObject";