nil、Nil、NULL、NSNull之间的区别
来源:互联网 发布:数据分析能干什么 编辑:程序博客网 时间:2024/06/14 22:50
nil、Nil、NULL、NSNull之间的区别
nil的含义
指向一个对象的指针为空,用于给对象指针赋值为空,防止野指针的产生;也称nil为空对象:表示一个已经被释放了的对象,和值为空的对象(NSNull)不同。NSNull是一个对象,只不过这个对象的值为空
#ifndef nil# if __has_feature(cxx_nullptr)# define nil nullptr# else# define nil __DARWIN_NULL# endif#endif
给对象指针赋值为空:
NSString * name = nil;NSString * url = nil;id object = nil;
Nil的含义
指向一个类的指针为空,用于给类对象指针赋值为空
#ifndef Nil# if __has_feature(cxx_nullptr)# define Nil nullptr# else# define Nil __DARWIN_NULL# endif#endif
给类对象赋值为空:
Class class = Nil;
NULL的含义
指向C类型的指针,用于给C类型的指针赋值为空
#if defined(__need_NULL)#undef NULL#ifdef __cplusplus# if !defined(__MINGW32__) && !defined(_MSC_VER)# define NULL __null# else# define NULL 0# endif#else# define NULL ((void*)0)#endif
给C类型指针赋值:
int * a = NULL;char * ch = NULL;struct aStruct = NULL;
NSNull的含义
NSNull是一个类,其继承自NSObject,只拥有一个类方法。实例对象表示这是一个内容为空的对象。主要用于数组、字典。
NSMutableArray * mArray = [NSMutableArray array];[mArray addObject:[NSNull null]];NSLog(@"%@", [mArray firstObject]); // 输出为:<null>NSMutableDictionary * dict = [NSMutableDictionary dictionary];[dict setObject:[NSNull null] forKey:@"null"];NSLog(@"%@", dict[@"null"]); // 输出为:<null>
由此可见,可用NSNull的实例对象在数组、字典中占位,其所占有的位置为空。
nil、Nil、NULL的使用对比
先看下面做的一个实验:
NSArray * array = [NSArray arrayWithObjects:@"good", @"morning", nil];// array = nil; // 输出:0// array = NULL; // 输出:0// array = Nil; // 输出:0 NSLog(@"%ld", array.count); // 分别使用上面三句注释的语句,输出值无区别 Class class = [NSURL class];// class = Nil; // 输出:(null)// class = nil; // 输出:(null)// class = NULL; // 输出:(null) NSLog(@"%@", class); // 分别使用上面三句注释的语句,输出值无区别 int a = 10; int * p = &a;// p = NULL; // 输出:0x0// p = nil; // 输出:0x0// p = Nil; // 输出:0x0 NSLog(@"%p", p); // 分别使用上面三句注释的语句,输出值无区别
结论:
1> nil、Nil、NULL在使用上是没有什么区别的,但是程序员的一个约定:C结构的指针使用NULL;对象指针使用nil;类对象指针使用Nil。
2> 另外NSNull和nil、Nil、NULL具有本质上的区别。NSNull是一个对象,而nil、Nil、NULL只是给指针赋空值。
3> 在另外,给一个赋值为nil的对象发送消息,不会产生异常。当然给一个赋值为Nil、NULL的对象发送消息也不会产生异常,这个在例子中已经证实。故根据此条结论的总结为:nil、Nil、NULL目的都是给一个指针赋值为空,给空指针发送消息不会产生异常
0 0
- nil Nil NULL NSNull 之间的区别
- nil Nil NULL NSNull 之间的区别
- nil,Nil,NULL,NSNULL之间的区别
- nil Nil NULL NSNull 之间的区别
- nil、Nil、NULL、NSNull之间的区别
- nil Nil NULL NSNull 之间的区别
- nil,NSNull,NULL之间的区别
- Objective-C 中nil Nil NULL NSNull 之间的区别
- nil Nil NULL及NSNull 之间的区别
- Objective-C 中nil Nil NULL NSNull 之间的区别
- nil/Nil/NULL/NSNull的区别
- nil/Nil/NULL/NSNull的区别
- nil、Nil、NULL、NSNull 的区别
- nil, Nil, NULL和NSNull的区别
- nil/Nil/NULL/NSNull的区别
- nil/Nil/NULL/NSNull的区别
- Nil, nil, NULL, NSNull的一点区别
- nil,Nil,NULL,NSNull的区别
- Linux 右键菜单(添加新建文件选项)
- 修改Linux图标
- spingmvc简单上传文件笔记
- web前台环境配置
- L2-2. 链表去重
- nil、Nil、NULL、NSNull之间的区别
- 顺序表应用6:有序顺序表查询
- java中的八种排序
- Android 超好正则表达式工具类RegexUtil
- UI 增加热点区域
- ExpandableListView的使用
- Permisson Denied !ssh传输文件报错
- mysql 多表 update sql语句总结
- VS2013 配置 VLFeat