從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";
突然覺得世界清爽了不少,對於熟悉C語言和java等的童鞋來說,是不是覺得親切多了?
關於NSDictionary和NSNumber的變化如下, 就不細說啦。
II.NSDictionary
一般性的寫法:
dict = [NSDictionary dictionaryWithObjects:@[o1, o2, o3]
forKeys:@[k1, k2, k3]];
LLVM4.0之前後:
dict = @{ k1 : o1, k2 : o2, k3 : o3 };
III. NSNumber
一般性的寫法:
NSNumber *number;
number = [NSNumber numberWithChar:'X'];
number = [NSNumber numberWithInt:12345];
number = [NSNumber numberWithUnsignedLong:12345ul];
number = [NSNumber numberWithLongLong:12345ll];
number = [NSNumber numberWithFloat:123.45f];
number = [NSNumber numberWithDouble:123.45];
number = [NSNumber numberWithBool:YES];
LLVM4.0之前後:
NSNumber *number;
number = @'X';
number = @12345;
number = @12345ul;
number = @12345ll;
number = @123.45f;
number = @123.45;
number = @YES;
查看本欄目