美文网首页
nil、Nil、NSNull、NULL

nil、Nil、NSNull、NULL

作者: 张_何 | 来源:发表于2018-08-16 17:28 被阅读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


    参考文章

    相关文章

      网友评论

          本文标题:nil、Nil、NSNull、NULL

          本文链接:https://www.haomeiwen.com/subject/gmpobftx.html