导语
字面量语法是利用语法糖(指与开发所用语言等效且更易读的语法)的特性来提高代码的可读性。在Objective-C(以下简称OC)的使用过程中,我们会经常用到Foundation框架中的NSString、NSNumber、NSArray、NSDictionary,但是OC语法繁杂,在创建它们的时候会让代码变得不易读,所以利用字面量来提高代码可读性。
1、NSString 字面量
不用字面量创建NSSting对象的时候:
1 | NSString *string = [[NSString alloc] initWithString:@"String"]; |
使用字面量创建字符串对象:
1 | NSString *string = @"String"; |
以上貌似然并卵,而且目前大家基本都是这么写的。
2、NSNumber 字面量
不用字面量的创建:
1 | NSNumber *someNumber = [NSNumber numberWithInt:1]; |
使用字面创建:
1 | NSNumber *intNumber = @1; |
3、NSArray字面量
不用字面量创建一个数组:
1 | NSArray *array = [NSArray arrayWithObjects:@"first",@"second",@"third", nil]; |
获取某个下标对应的对象:
1 | [array objectAtIndex:2]; |
使用字面量创建:
1 | NSArray *array = @[@"first",@"second",@"third"]; |
获取下标对应对象:
1 | array[2]; |
大家应该都在用字面量的方式吧。无论使用哪种方法创建,都需要注意:
如果数组元素中有nil,用字面量创建的数组则会出现异常;用
arrayWithObjects
创建的数组,会依次处理各个参数,直到遇到nil为止,也就是说,如果array中的@"second"
换成nil
,则创建的数组只有@"first"
一个元素。
4、NSDictionary字面量
字典是映射型的数据结构,表现为键值对。创建方式:
1 | NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"one",@"2",@"two",@"3",@"three", nil]; |
这种创建方式,顺序为<值>,<键>,<值>,<键>,当键值对多了以后,就很难看清楚了。
使用字面量创建:
1 | /*asssad*/ |
与数组字面量创建一样,如果字典字面创建的时候,有元素为nil,会出现异常;
dictionaryWithObjectsAndKeys
创建的时候,会在首个nil之前停下来,nil之后则不会被创建进字典。
不使用字面量访问字典元素:
1 | [dictionary objectForKey:@"one"]; |
使用字面量访问字典元素:
1 | dictionary[@"one"]; |
##5、可变字典与可变数组
可变字典与可变数组不可使用字面量的方法初始化,否则会出现异常。但是可以使用字面量的方法来访问对应下标和对应键的元素。
如果非要使用字面量来创建可变数组或者可变字典,那就需要在创建的时候复制一份:
1 | NSMutableArray *mutArray = [@[@"1",@"2",@"3"] mutableCopy]; |
这样做会多创建一个对象而且还多调用了
mutableCopy
总结
虽然字面量方法很简单,而且大部分开发者在平常开发时都会使用,但其简约的思想是整洁代码不可或缺的。字面量创建NSString、NSNumber、NSArray、NSDictionary的时候会方便很多,尤其是当创建所需的元素很多的时候,字面量方法会提高代码的可读性,所以建议大家使用字面量语法。当然,它也有其局限性,对与可变类型的支持不够好。
参考书籍《Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法》