nil、Nil、NSNull、NULL

2018-08-16  本文已影响0人  张_何

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


参考文章

上一篇下一篇

猜你喜欢

热点阅读