博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nil、Nil、NULL、NSNull的区别
阅读量:5947 次
发布时间:2019-06-19

本文共 1906 字,大约阅读时间需要 6 分钟。

 

nil:指向一个对象的空指针,对objective c id 对象赋空值.

Nil:指向一个类的空指针,表示对类进行赋空值.

NULL:指向其他类型(如:基本类型、C类型)的空指针, 用于对非对象指针赋空值.

NSNull:在集合对象中,表示空值的对象.

1.nil 在指向一个对象的指针为空 定义如下:

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

在Objective-C中用于id类型的对象

NSString *str = nil;NSURL    *url  = nil;id object = nil;

2.Nil 指向一个类的指针为空 定义如下:

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

在Objective-C中用于Class类型的对象

Class Class1 = Nil;Clsss Class2 = [NSURL class];

3.NULL 指向C类型的指针为空 在stddef.h中定义如下:

#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

用于对非对象指针赋空值简单举例

int   *intA    = NULL;char *charC     = NULL; struct structStr = NULL;

4.NSNull在Objective-C中是一个类.

NSNull有 + (NSNull *)null; 单例方法.

多用于集合(NSArray,NSDictionary)中值为空的对象.

NSArray *array = [NSArray arrayWithObjects:                      [[NSObject alloc] init],                      [NSNull null],                      @"aaa", nil, [[NSObject alloc] init], [[NSObject alloc] init], nil]; NSLog(@"%ld", array.count); // 输出 3,NSArray以nil结尾

//

NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:                                @"Object0", @"Key0",                                @"Object1", @"Key1", nil, @"Key-nil" @"Object2", @"Key2", nil]; NSLog(@"%@", dictionary); // 输出2个key-value,NSDictionary也是以nil结尾

//

NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc] init];[mutableDictionary setObject:nil forKey:@"Key-nil"]; // 会引起Crash[mutableDictionary setObject:[NSNull null] forKey:@"Key-nil"]; // 不会引起Crash //所以在使用时,如下方法是比较安全的 [mutableDictionary setObject:(nil == value ? [NSNull null] : value) forKey:@"Key"];

每天总结一点点。。

转载于:https://www.cnblogs.com/includeao/p/6404760.html

你可能感兴趣的文章
数据库索引探索
查看>>
struts2使用json需要注意的问题
查看>>
gitlab runner 优化
查看>>
快速添加百度网盘文件到Aria2 猴油脚本
查看>>
mac 无法登录mysql的解决办法
查看>>
Shiro权限判断异常之命名导致的subject.isPermitted 异常
查看>>
Hello world travels in cpp - 字符串(2)
查看>>
struts2自定义拦截器
查看>>
Eclipse安装adt插件后之后看不到andorid manger
查看>>
Kafka服务端脚本详解(1)一topics
查看>>
Zookeeper 集群安装配置,超详细,速度收藏!
查看>>
js中var self=this的解释
查看>>
js--字符串reverse
查看>>
面试题
查看>>
Facebook 接入之获取各个配置参数
查看>>
android ant Compile failed; see the compiler error
查看>>
项目经理笔记一
查看>>
计算机字符编码从0/1到UTF-8
查看>>
[原]Jenkins(三)---Jenkins初始配置和插件配置
查看>>
Cache Plugin 实现过程
查看>>