iOS开发中,数组为空的判断处理

这篇文章主要来说一下,NSArray判断是否为空需要注意的问题。

有些经验不足的开发者,在判断数组是否为空时,会简单的写成:

if (array != nil)

这种形式,或者是:

if (array.count != 0)

这种形式。

其实,严格来说,这两种写法,都是考虑不足并且不稳定的。

首先来说一下,二者之间的区别。

array == nil

这种情况指的是这个array对象是一个nil对象,而不是一个NSArray类型对象。任何对NSArray类属性的直接调用都会导致程序crash,例如:

int length = array.count; // 如果array是nil对象,程序走到这一行会直接crash

array.count == 0

这种情况跟上一种不同的在于,此时的array是一个NSArray类型对象,只不过这个array里面没有元素。但它本身是可以作为NSArray对象来使用的。

int length = array.count; // 不会有问题,length的值为0

但为什么说这两种判断都是不安全的呢?

原因是因为这两种情况在实际开发中,是都有可能出现的。

前一种情况,后台有可能由于各种原因,对某个字段返回了null值,这时我们取到的就是nil,后一种情况,后台可能对某一个数据取值,但取到了0个,这时返回的是一个空组,我们取到的就是[],空组。

我们做空值判断的很大一部分原因就是为了防止在后台接口数据返回一些异常数据的时候,程序能保证稳定性。

因此只判断一种情况是不安全的,需要两种情况都进行判断。

比如你可以写成:

if (array != nil && array.count != 0)

而我个人的建议是,在判断 array.count 的时候,最好不要用 . 号,尽管在上面的代码中,array.count 不会出现问题,但作为一种习惯,我更推荐写成:

if (array != nil && [array count] != 0)

原因很简单,[array count] 即使在array为nil对象的时候,也不会导致crash出现。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。