码迷,mamicode.com
首页 > 其他好文 > 详细

nil / Nil / NULL / NSNull 的区别

时间:2014-08-13 21:49:47      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   使用   os   io   for   ar   

bubuko.com,布布扣

  NULL在C中被定义,但是C并不包括nil、Nil和NSNull,这三者属于Objective-C(下称OC)部分。

  • NULL是什么?

   int *a = NULL;

   A null pointer to anything else, is for C-style memory pointers.
   它是C类型的一个指针变量,确切地说是一个空指针,不指向任何地方,在内存上它的值被设置为0。比如说int *pointer = NULL,指针变量pointer在内存里的值为0,不指向任何地方。

   本质:空指针

 

  • nil和Nil是什么?

    NSObject *obj = nil;  
    nil: A null pointer to an Objective-C object. (OC对象的空指针。)

    Class *class = Nil;
    Nil: A null pointer to an Objective-C class. (OC类的空指针。)

    本质:空指针,他俩压根就是NULL。

 

  • NSNull是什么?

   [NSArray arrayWithObjects:@"Steve Jobs", [NSNull null], @"Tim Cook", nil];  

   官方解释:The NSNull class defines a singleton object used to represent null values in collection objects (which don’t allow nil values).
   NSNull继承与NSObject,仅有一个方法[NSNull null]。当调用这个方法的时候,在内存中开辟出一块空间,并返回这块空间的首地址指针。它仅有一个用途,那就是代表集合对象中的空对象,起到占茅坑作用;

   本质:空对象

 

  • 总结:

bubuko.com,布布扣

  (1)NULL、nil和Nil本质同为空指针。如下测试代码:
    if(NULL == nil && NULL == Nil)
      NSLog(@"NULL == nil && NULL == Nil"); 
     else
      NSLog(@"NULL != nil || NULL != Nil"); 
     控制台打印结果:"NULL == nil && NULL == Nil"。 

  (2)空指针与空对象的区别。
    后者指向在堆内存中开辟出的NSObject对象,前者不指向任何。

  (3)注意正确使用NULL、nil和Nil编码。

    NSObject *obj = NULL;
    int  *a = Nil;
    Class *class = nil;
     如果你的代码如这般滥用NULL、nil和Nil,那么你是个没有节操的程序员!
 

作者声明:若有错误请指出,谢谢!

nil / Nil / NULL / NSNull 的区别,布布扣,bubuko.com

nil / Nil / NULL / NSNull 的区别

标签:style   blog   http   使用   os   io   for   ar   

原文地址:http://www.cnblogs.com/yutao86/p/3910849.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!