• objective-C nil,Nil,NULL之间的不同


    在看书的时候突然看到一个问题,就是关于nil,Nil,NULL有什么不同,怎么使用?

    查了一下,在stack overflow上面看到一个很nice的解释,翻译记录一下下。

    nil

    首先,nil是指一个OC对象的空值表达,如下:

    NSString *someString = nil;
    NSURL *someURL = nil;
    id someObject = nil;
    if (anotherObject == nil) // do something
    

    Nil

    而Nil则是对于OC Class的空值表达,一般不太会涉及到用一个变量来引用Class,所以,不是很常用。

    Class someClass = Nil;
    Class anotherClass = [NSString class];
    

    NULL

    NULL是对任意C 指针的空值表达。

    int *pointerToInt = NULL;
    char *pointerToChar = NULL;
    struct TreeNode *rootNode = NULL;
    

    NSNull

    NSNull是代表一个空值对象的类,意思是,在Class中,返回+ [NSNull null]的那个对象。

    它和nil是不同的,因为nil是字面空值,也就是说,nil不是一个对象。

    对于single instance来说,NSNull 它可以被看作是一个对象。

    NSNull经常用于Foundation集合中因为它们不能存储空值,对于字典,objectForKey: 返回ni意味着给定的键值在字典中没有对应的对象,即,该key值还没有被添加到字典中。

    如果关于某个key还没有值,但你想明确表达出来,可以使用[NSNull null]。

    下面的表达是违法的,字典中对象不能为nil

    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    [dict setObject:nil forKey:@"someKey"];
    

    下面是有效的,前面说过,NSNull可以被看作是一个对象。

    NSMutableDictionary *dict1 = [NSMutableDictionary dictionary];
    [dict1 setObject:[NSNull null] forKey:@"someKey"];
    NSLog(@"dic %@",dict1);
    --
    dic {
      someKey = "<null>";
    }
    

    值得一提的是,Foundation集合的初始化动作使用nil作为对象列表结尾的标记,而不必指定列表中元素的数量。这种情况是因为nil无法存储在Foundation集合中。例如,

    NSArray *array = [NSArray arrayWithObjects:@"one", @"two", nil];
    
  • 相关阅读:
    面对苹果的抄袭指责,小米到底有没有抄袭?
    如何用Ajax传一个数组数据
    为何日本人如此重视孩子的早餐问题
    常见编程语言对REPL支持情况小结
    坚持未必都是美德,也可能是无知
    PHP 5.4语法改进与弃用特性
    解决CI框架的Disallowed Key Characters错误提示
    如何抓取开了gzip的网页
    CodeIgniter自带的数据库类使用介绍
    Python内部变量与外部变量
  • 原文地址:https://www.cnblogs.com/xiaoqiangink/p/12658806.html
Copyright © 2020-2023  润新知