nil、Nil、NULL、NSNull的区别
nil:指向一个对象的空指针
Nil:指向一个类的空指针
NULL:指向其他类型(如:基本类型、C类型)的空指针
NSNull:通常表示集合中的空值
举例:
NSURL *url = nil;
Class class = Nil;
int *pointerInt = NULL;
NSArray *array = [NSArray arrayWithObjects:[[NSObject alloc] init], [NSNull null], [[NSObject alloc] init], [[NSObject alloc] init], nil];
为什么上面的array里面的空对象不直接用nil?
如果用nil,就会变成NSArray *array = [NSArray arrayWithObjects:[[NSObject alloc] init], nil, [[NSObject alloc] init], [[NSObject alloc] init], nil];,那么数组到第二个位置就会结束。打印[array count]的话会显示1而不是4
所以[NSNull null]通常可以作为一个数组的占位符,从而是数组的count计算准确
///
原文链接:http://www.jianshu.com/p/007212d16cc7
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
前言:
在写作之前 我想让大家看一些 请求数据:这些 数据 可以看的 出 我们 要解析的 东西,不过 大家 要注意 ⚠ 一下 "<null>"这样的空值数据,在对 请求数据 本地化的时候 或者是 我们 建立 数据Model的时候,我们 一定会对 请求数据解析 并取出 其中的 值。 这里 我们 需要注意的是 "<null>" 这个 空数据 我们在取值的时候 会造成程序的崩溃,因此我们 我们 要怎么避免哪? 可能有小伙伴们想到了一些 方法 。。。这里 我也简单 说一下 我解决这个 问题的 思路 与方法 ,希望可以 帮助大家在遇到同样的问题的时候 有个参照。
思路:
好啦,我们 可以想一下 我们想要取值的话 我们可以 判断 一下 我们的 数据 是不是 "<null>"然后对数据进一步操作,当让 如果 我们 的 数据少 可以 一个一个 遍历(但是 也是 累呀 );这里 我们整理一下自己的思想,我们 可以:
1.获取我们请求数据的所有Keys: [字典 allKeys]
2.利用OC 遍历法 for in (for in 遍历)
3.(重头戏 isKindOfClass ) 利用它 来 把我们 的 "<null>"识别出来;
实现代码:
for (NSString *str in [dic allKeys])
{
NSString *str1 = [dic objectForKey:str];
if ([str1 isKindOfClass:[NSNull class]])
{
NSLog(@"--------------%@",str1);
}
else
{
//尽情享受取值的 乐趣吧。。。。。。。
}
}
总结:
可以看出的是 我们 的 问题 可能会是 各种各样的 、 不可控的 。 我们 解决问题的 思路 也不要太过固守。如果 这个 问题 我们 简单的 比较 是否 为 nil 、 null 的话 是不能 解决问题的 。Working。。。。。。。。。。。。。。。。。。。。。。。。