nil的比较

Objective-C中nil的比较与使用注意事项
本文探讨了Objective-C语言中nil的比较特性及其潜在的陷阱,详细解释了nil与不同值进行比较时的行为,并指出直接使用nil作为参数的潜在风险。
Nil的比较
Objective-C相当的与众不同,因为对 nil发送消息不会发生任何事情,而是简单的返回0。基本上,在你可能遇到的每种语言中,同样的事情要么被类型系统禁止,要么就是产生一个运行时错误。这既是优点也是缺点。鉴于这个文章的主题,我们来关注下缺点。
首先,我们看一个等同性的测试:

[nil isEqual: @"string"]
给 nil发送消息总是返回0,在这儿就相当于 NO。这次恰好是正确的答案,所以看起来我们有个不错的开头!但是,看看这个:
[nil isEqual: nil]
这个也是返回 NO。即使参数是完全相同的值也无关紧要。参数的值到底是什么根本不重要,因为给nil发送消息不管怎样总是返回0。所以用 isEqual:来判断,nil永远不会等同于任何东西,包括它自身。大多情况下这是正确的,但不总是。
最后,再考虑和 nil比较的另一种顺序:
[@"string" isEqual: nil]
这个会怎样呢?好吧,我们无法确定。它有可能返回 NO,也有可能会抛出异常,还有可能干脆崩溃。给一个没有明确告知可以接受nil为参数的方法传递nil是一个坏注意。并且,isEqual:并没有表明它可以接受nil。

转载于:https://my.oschina.net/qianming190729717/blog/161867

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值