OC中的NSString、NSNumber、NSArray、NSDictionary这几个类,在Objective-C 1.0起可以用一种非常简单的方式创建这些类的对象-“字面量语法”。
1.NSString的字面量语法如下:
NSString *str = @"Objective-C";
2.NSNumber的字面量语法如下:
NSNumber *num = @1;
3.NSArray的字面量语法如下:
NSArray *array = @[@1, @2, @3, @4];
NSNumber *num = array[1];
4.NSDictionary的字面量语法如下:
NSDictionary *dict = @{@"one": @1, @"two": @2};
NSNumber *num1 = dict[@"one"];
为什么要说尽量用字面量语法呢?
首先语法更简洁了,这就不用说了。
然后就是另一个原因了:
首先执行下面代码:
NSObject *obj1 = [NSObject new];
NSObject *obj2 = nil;
NSObject *obj3 = [NSObject new];
NSArray *array1 = [NSArray arrayWithObjects:obj1, obj2, obj3, nil];
你会发现array中只有一个元素,为什么呢,因为obj2是空值arrayWithObjects方法会依次处理各个参数,直到发现nil为止,然而obj2是空值所以方法提前结束了。
下面是另一段代码:
NSObject *obj1 = [NSObject new];
NSObject *obj2 = nil;
NSObject *obj3 = [NSObject new];
NSArray *array1 = @[obj1, obj2, obj3];
运行之后你就会发现异常了,这是因为字面量语法创建数组时如果有元素是空值会异常。
这就说明,字面量语法更加安全一些,因为这样可以使我们尽早发现这个错误,这时抛出的异常肯定比你以后去找数组为什么少个元素的省力多了。
最后,我们也可以用字面量来创建可变对象,只要copy一份,例如数组:
NSMutableArray *mutableArray = [@[@1, @2, @3, @4] mutableCopy];
这样多调了一个方法,多创建一个对象,但是好处还是比缺点多的。