nil,Nil,NULL,NSNull的区别

来源:互联网 发布:网络摄像头芯片方案 编辑:程序博客网 时间:2024/05/15 04:27

在iOS平台里,出现过nil ,Nil ,NULL, NSNull 的区别


 NULL:定义在#include <stddef.h>  #define NULL (void*)0  所以NULL的本质就是((void*)0)
 Nil: 在系统的定义里:
 
#ifndef Nil   
# if __has_feature(cxx_nullptr)   
#   define Nil nullptr   
# else   
#   define Nil __DARWIN_NULL   
# endif   
#endif    


实际在Objective-C语言里__DARWIN_NULL的定义是 #define __DARWIN_NULL ((void *)0)   
结论:Nil的本质也是 ((void *)0)   
nil: 在系统的定义里:


#ifndef nil  
# if __has_feature(cxx_nullptr)  
#   define nil nullptr   
# else   
# define nil __DARWIN_NULL   
# endif   
#endif 



NSNull:本质上就Objective-C的一个类。其定义:
      

@interface NSNull : NSObject <NSCopying, NSSecureCoding>


+ (NSNull *)null;


@end  



NULL 用于表示C语言指针中的空值。
nil 用于表示Objective-C语言里对象的空值。
Nil 用于表示Objective-C语言类类型(Class)值为空的情况。


总结:不管是NULL 、Nil 、nil它们的本质都是一样的((void*)0),只是写法不同, 这样做意义是为了区分不同的数据类型,增强代码的可读性。举个例子:当你一看到一个变量赋值为NULL,实际上一下子就能明白, 这个变量是C语言里定义的指针类型。当看到nil的时候, 就能知道这个变量是Objective-C的对象指针。。。
0 0
原创粉丝点击