nil
表示空对象,每一个对象的引用计数为0时,系统会将这块内存释放掉,这时这个对象就为nil
对于这种空对象所有retain的操作都会引起程序的崩溃
NSMutableArray *mArray = [NSMutableArray array];
NSMutableDictionary *mDict = [NSMutableDictionary dictionary];
NSObject *obj = [NSObject new];
obj = nil;
[mArray addObject:obj]; // 会引起崩溃
[mDict setObject:obj forKey:@"key"]; // 会引起崩溃
NSNull
表示一个值为空的对象,并不是没有值,而是值为空,NSNull是继承自NSObject的
NSMutableArray *mArray = [NSMutableArray array];
NSMutableDictionary *mDict = [NSMutableDictionary dictionary];
NSObject *obj = [NSObject new];
obj = nil;
if (obj == nil) {
obj = [NSNull null];
}
[mArray addObject:obj]; // 不会引起崩溃
[mDict setObject:obj forKey:@"key"]; // 不会引起崩溃
Nil
nil和Nil在使用上是没有严格限定的,也就是说凡是使用nil的地方都可以用Nil来代替,反之亦然。只不过从编程人员的规约中我们约定俗成地将nil表示一个空对象,Nil表示一个空类。参考代码如下
id object = nil;
Class class = Nil;
if (object == nil) {
NSLog(@"nil");
}
if (object == Nil) {
NSLog(@"Nil=>nil");
}
if (class == Nil) {
NSLog(@"Nil");
}
if (class == nil) {
NSLog(@"nil=>Nil");
}
输出结果
nil
Nil=>nil
Nil
nil=>Nil
NULL
我们知道Object-C来源于C、支持于C,当然也有别于C。而NULL就是典型C语言的语法,它表示一个空指针,参考代码如下:
int *ponit = NULL
网友评论