3 - 多用字面量语法,少用与之等价的方法
字面量语法涉及到的类型有:
NSString,NSNumber,NSArray,NSDictionary
现在先不管什么叫字面量语法,先来看一下怎么生成一个NSString类型对象并赋值到变量上:
NSString *someString = @"Jk_Chan";
可以看出这里的语法,直接使用@""便可以生成一个NSString对象,而不需要调用new或者alloc与init方法。
同样的,NSNumber,NSArray,NSDictionary也可以使用字面量语法来生成对象,简简单单。
NSNumber *intNumber = @1;
NSNumber *intNumber = @1.5;
NSNumber *boolNumber = @YES;
NSNumber *charNumber = @'a';
NSNumber *expressionNumber = @(2 * 8);
NSArray *animals = @[@"cat", @"dog"];//不需要nil结尾
取数组元素的时候更方便:
NSString *dog = animals[1];
需要注意一点就是,使用字面量语法的时候放入的元素不能为nil,否则程序会崩溃,所以放入的时候需要确保放入的对象会不会是nil。
及时不使用字面量语法去初始化一个数组对象的时候,如果所放入的元素并不是最后一个是nil,也就是中途的元素便出现nil,那么nil之后的那些元素不会被存入到该数组对象中。
NSDictionary *personData = @{@"firstName" : @"Matt", @"lastName" : @"Galloway", @"age" : @28};
取字典值:
NSString *lastName = personData[@"lastName"];
这里也需要提及一下,无论是否使用字面量语法,往字典内存放一个为nil的值也会使程序奔溃。
可变版本数组与字典操作元素:
mutableArray[1] = @"dog";
mutableDictionary[@"lastName"] = @"Galloway";
这里还有一点值得注意的就是:
使用字面量语法创建出来的字符串,数组,字典对象都是不可变的,若想生成可变版本,则需要复制一份,并且是应该使用mutableCopy:
NSMutableArray *mutable = [@[@1, @2, @3] mutableCopy];
最后来抄一下书本的要点:
应该使用字面量语法来创建字符串,数值,数组,字典。与创建此类对象的常规方法相比,这么做更加简明扼要。
应该通过去下标操作来访问数组下标或字典中的键所对应的元素。
用字面量语法创建数组或字典时,若值中有nil,则会抛出异常。因此,务必确保值里不含nil。