//请看题,下面的写法用字面量语法来写,并且是可变数组 NSString *str1 = @"Hello"; NSString *str2; NSString *str3 = @"World!"; NSArray *array0 = [NSArray arrayWithObjects:str1,str2,str3, nil];
大家怎么来写?是不是这样?
NSMutableArray *arrayMutable = [@[str1,str2,str3]mutableCopy];
然后你会发现程序崩溃了:
2017-11-01 19:05:23.771334+0800 11[15655:3673082] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** - [__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[1]'
在
NSArray *array0 = [NSArray arrayWithObjects:str1,str2,str3, nil];
中却没有崩溃,但是却有一个问题,数组以nil结束,所以在str2时数组默认结束,数组中只有一个str1;
用字面量语法写的时候,因为字面量语法时,若其中一项为nil,则会抛出异常,结束程序,这也是字面量语法更为安全的原因,比创建好数组才发现元素少了要好。
因为字面量语法写出来的数字字典都是不可变的,所以为了让其可变,需要对其进行mutableCopy,这也是字面量语法的局限性,总的来说,有点要大于缺点,因为字面量语法不需要来初始化,也不需要繁琐的语法来添加内容,更加简洁。