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

探讨了Objective-C中使用字面量语法创建可变数组的方法,并解释了字面量语法的安全性和局限性。
//请看题,下面的写法用字面量语法来写,并且是可变数组
    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,这也是字面量语法的局限性,总的来说,有点要大于缺点,因为字面量语法不需要来初始化,也不需要繁琐的语法来添加内容,更加简洁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingFire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值