nil null [NSNull null]

mark:

iOS开发中(null)与的处理

这篇不错

nil和NULL从字面意思来理解比较简单,
nil是一个对象,而NULL是一个值,我的理解为nil是将对象设置为空,
而NULL是将基本类型设置为空的。而且我们对于nil调用方法,不会产生crash或者抛出异常。
看一下如下代码

// nil指向对象
NSURL *url = nil;
// Nil指向类
Class class = Nil;
// NULL是基本数据类型设置为空
int pointerInt = NULL;

nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空。


nil、NULL本质上是相同的,都指向0x0地址,[NSNULL null]是一个对象,存储在常量区,占用着固定地址。
可以这样理解:

NULL 和 nil,没有实质区别,只不过前者是C语言只中的,而oc中因为引入“面向对象的概念”,所以相比于NULL要拗口一点,叫做,nil 表示一个指针指向的对象为空,完整一点的理解是:nil表示一个指针指向的对象为[NSNull null],(即为空)

另外最重要的是

nil 常见于非集合类中。[NSNull null]常见于集合类中。

也就是说
如果把一个为nil的字符串赋值给label的text会显示(null)
==
而想看到这种情况,要这样做,

 NSArray *arr = [NSArray arrayWithObjects:@"one",@"two",[NSNull null], nil];
        for (NSString *str in arr) {
            NSLog(@"%@",str);
        }
2015-10-06 16:40:25.816 test[96177:5565855] one
2015-10-06 16:40:25.817 test[96177:5565855] two
2015-10-06 16:40:25.817 test[96177:5565855] 

换言之,出现这种情况是比较少见

你可能感兴趣的:(nil null [NSNull null])