# 3、多用字面量语法，少用与之等价的方法

​ 字面量语法更精简、整洁，没有多余的语法成分。

```objectivec
// 创建字符串，使用
NSString *str = @"Hello world";
// 而非: NSString *str = [[NSString alloc] initWithString:@"Hello world"];

// 创建数值，使用
NSNumber *num = @1;
// 而非: NSNumber *num = [NSNumber numberWithInt:1];

// 创建数组，使用
NSMutableArray *arr = [@[@"OC", @"Swift"] mutableCopy];
// 而非: NSArray *arr = [NSArray arrayWithObjects:@"OC", @"Swift", nil];
// 从数组里取值，使用
NSString *language = arr[0]; // 下标语法
// 而非: NSString *language = [arr objectAtIndex:1];
// 修改数组，使用
arr[0] = @"Objective-C";
// 而非: [arr replaceObjectAtIndex:0 withObject:@"Objective-C"];

// 创建字典，使用
NSMutableDictionary *dic = [@{@"key1": @"value1", @"key2": @"value2"} mutableCopy];
// 而非: NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1": @"key1", @"value2": @"key2", nil];
// 从字典里取值，使用
NSString *value1 = dic[@"key1"];
// 而非: NSString *value1 = [dic objectForKey:@"key1"];
// 修改字典，使用
dic[@"key1"] = @"OC";
// 而非: [dic setObject:@"OC" forKey:@"key1"];
```

​ 不过使用字面量语法创建数组时要注意，若数组元素对象中有nil，则会抛出异常，因为字面量语法实际上只是一种“语法糖”（syntactic sugar），其效果等于是先创建了一个数组，然后把方括号内的所有对象都加到这个数组中。Nr

要点：

* 应该使用字面量语法来创建字符串、数值、数组、字典。与创建此类对象的常规方法相比，这么做更加简明扼要。
* 应该通过取下标操作来访问数组下标或字典中的键所对应的元素
* 用字面量语法创建数组或字典时，若值中有nil，则会抛出异常。因此，务必确保值里不喊nil
