iOS开发字面语法之数组注意事项

释放双眼,带上耳机,听听看~!
//请看题,下面的写法用字面量语法来写,并且是可变数组
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,这也是字面量语法的局限性,总的来说,有点要大于缺点,因为字面量语法不需要来初始化,也不需要繁琐的语法来添加内容,更加简洁。

人已赞赏
iOS文章

iOS开发stringByReplacingOccurrencesOfString不起作用的坑

2021-2-2 11:30:39

iOS文章

iOS开发不通过import引入类名实现push或present

2021-2-2 12:24:54

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索