这篇文章主要来说一下,NSArray判断是否为空需要注意的问题。
有些经验不足的开发者,在判断数组是否为空时,会简单的写成:
if (array != nil)
if (array.count != 0)
其实,严格来说,这两种写法,都是考虑不足并且不稳定的。
首先来说一下,二者之间的区别。
array == nil
这种情况指的是这个array对象是一个nil对象,而不是一个NSArray类型对象。任何对NSArray类属性的直接调用都会导致程序crash,例如:
int length = array.count; // 如果array是nil对象,程序走到这一行会直接crash
这种情况跟上一种不同的在于,此时的array是一个NSArray类型对象,只不过这个array里面没有元素。但它本身是可以作为NSArray对象来使用的。
int length = array.count; // 不会有问题,length的值为0
原因是因为这两种情况在实际开发中,是都有可能出现的。
前一种情况,后台有可能由于各种原因,对某个字段返回了null值,这时我们取到的就是nil,后一种情况,后台可能对某一个数据取值,但取到了0个,这时返回的是一个空组,我们取到的就是[],空组。
我们做空值判断的很大一部分原因就是为了防止在后台接口数据返回一些异常数据的时候,程序能保证稳定性。
因此只判断一种情况是不安全的,需要两种情况都进行判断。
比如你可以写成:
if (array != nil && array.count != 0)
if (array != nil && [array count] != 0)
原文地址:http://blog.csdn.net/tcthek/article/details/42675369