下列簡化寫法是IOS6.0以後的新寫法
NSNumber
//簡化前的寫法:
NSNumber *value1;
value1 = [NSNumber numberWithInt:12345];
value1 = [NSNumber numberWithFloat:123.45f];
value1 = [NSNumber numberWithDouble:123.45];
value1 = [NSNumber numberWithBool:YES];
//簡化後的寫法:
NSNumber *value2;
value2 = @12345;
value2 = @123.45f;
value2 = @123.45;
value2 = @YES;
//裝箱表達式也可以采用類似的寫法:
NSNumber *piOverSixteen1 = [NSNumber numberWithDouble: ( M_PI / 16 )];
NSString *path1 = [NSString stringWithUTF8String: getenv("PATH")];
//可以分別簡寫為:
NSNumber *piOverSixteen2 = @( M_PI / 16 );
NSString *path2= @( getenv("PATH") );
//對於字符串表達式來說,需要注意的是表達式的值一定不能是NULL,否則會拋出異常。
NSArray
//對於NSArray的初始化來說,有非常多的寫法,這裡就不再一一羅列,我們直接看新的寫法
NSArray *array;
array = @[]; //空數組
array = @[ a ]; //一個對象的數組
array = @[ a, b, c ]; //多個對象的數組
//編譯器在處理時:
array = @[ a, b, c ];
//編譯器生成的代碼:
id objects[] = { a, b, c };
NSUInteger count = sizeof(objects)/ sizeof(id);
array = [NSArray arrayWithObjects:objects count:count];
//注意,如果a,b,c對象有nil的話,運行時會拋出異常,這點和原來的處理方式不同,編碼的時候要多加小心。
NSDictionary
//同樣,對於字典這個數據結構來說,有很多種初始化的方式,我們來看新的寫法:
NSDictionary *dict;
dict = @{}; //空字典
dict = @{@"key1":@"value1" }; //包含一個鍵值對的字典
dict = @{ @"key1" : @"value1", @"key2" : @"value", @"key3" : @"value3" }; //包含多個鍵值對的字典
//采用上述寫法構建的容器都是不可變的,如果需要生成可變容器,可以傳遞-mutableCopy消息。例如
NSMutableArray *mutablePlanets = [@[
@"Mercury", @"Venus", @"Earth",
@"Mars", @"Jupiter", @"Saturn",
@"Uranus", @"Neptune"
] mutableCopy];
NSMutableDictionary *dic=[@{ @"key1" : @"value1", @"key2" : @"value", @"key3" : @"value3" } mutableCopy];