尽量用字面量语法(literal syntax)

OC中的NSString、NSNumber、NSArray、NSDictionary这几个类,在Objective-C 1.0起可以用一种非常简单的方式创建这些类的对象-“字面量语法”。

1.NSString的字面量语法如下:

1
NSString *str = @"Objective-C";

2.NSNumber的字面量语法如下:

1
NSNumber *num = @1;

3.NSArray的字面量语法如下:

1
2
NSArray *array = @[@1, @2, @3, @4];
NSNumber *num = array[1];

4.NSDictionary的字面量语法如下:

1
2
NSDictionary *dict = @{@"one": @1, @"two": @2};
NSNumber *num1 = dict[@"one"];

为什么要说尽量用字面量语法呢?
首先语法更简洁了,这就不用说了。
然后就是另一个原因了:
首先执行下面代码:

1
2
3
4
5
NSObject *obj1 = [NSObject new];
NSObject *obj2 = nil;
NSObject *obj3 = [NSObject new];
        
NSArray *array1 = [NSArray arrayWithObjects:obj1, obj2, obj3, nil];

你会发现array中只有一个元素,为什么呢,因为obj2是空值arrayWithObjects方法会依次处理各个参数,直到发现nil为止,然而obj2是空值所以方法提前结束了。
下面是另一段代码:

1
2
3
4
5
NSObject *obj1 = [NSObject new];
NSObject *obj2 = nil;
NSObject *obj3 = [NSObject new];
        
NSArray *array1 = @[obj1, obj2, obj3];

运行之后你就会发现异常了,这是因为字面量语法创建数组时如果有元素是空值会异常。

这就说明,字面量语法更加安全一些,因为这样可以使我们尽早发现这个错误,这时抛出的异常肯定比你以后去找数组为什么少个元素的省力多了。

最后,我们也可以用字面量来创建可变对象,只要copy一份,例如数组:

1
NSMutableArray *mutableArray = [@[@1, @2, @3, @4]  mutableCopy];

这样多调了一个方法,多创建一个对象,但是好处还是比缺点多的。


尽量用字面量语法(literal syntax)
https://houboye.github.io/2023/07/20/ios/literal-syntax/
作者
boye
发布于
2023年7月20日
许可协议