基本概念
nil用来给对象赋值(OC中的扔和对象都属于id类型) NULL则给任何指针赋值,NULL和nil不能互换,nil用于类指针赋值(在OC中类是一个对象,是类的meta-class的实例) NSNull则用于集合操作,它们虽然表示的都是空值,但使用的场合完全不同。
使用案例
id object = nil;
if (object) {
}
if (object == nil) {
}
NSArray *array = [[NSArray alloc] initWithObjects:@"First", @"Second", @"Third", nil];
NSNull *element = [array objectAtIndex:2];
if (element == [NSNull null]) {
NSLog(@"该元素为空!");
}
判断字典对象的元素是否为空:
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"iPhone", @"First", @"iPad", @"Second", nil];
NSNull *value = [dictionary objectForKey:@"First"];
if (value == [NSNull null]) {
NSLog(@"该元素为空!");
}
总结: nil:一般赋值给空对象 NULL:一般赋值给nil以外的其他空值,如SEL等 NSNull:NSNull中只有一个方法:+(NSNull *) null; [NSNull null] 是一个单例对象,它用在不能使用nil的场合 使用场合: 当向nil发送消息时,返回NO,不会有异常,程序将继续执行下去,而向NSNull的对象发送消息时会收到异常。 如下:
NSArray *array = [[NSArray alloc] initWithObjects:@"123", [NSNull null], @"Second", nil];
NSArray *arrayFirst = [[NSArray alloc] initWithArray:array];
NSLog(@"%@", arrayFirst);
NSArray *arraySecond = nil;
arraySecond = [arraySecond initWithArray:array];
NSLog(@"%@", arraySecond);
由于在NSArray和NSDictonary中nil中有特殊的含义(表示列表结束),所以不能在集合中放入nil值,如果确实需要存储一个表示“什么都没有的值”,可以使用NSNull类。 例如:
NSArray *array = [[NSArray alloc] initWithObjects:@"123", [NSNull null], @"Second", nil];
NSLog(@"%@", array[1]);
NSLog(@"%@", array[3]);
小结: 从字面意思来理解,nil是一个对象,而NULL是一个值,我的理解为nil是将对象设置为空,而null是将基本类型设置为空的 就像下方的描述:
nil -> Null-pointer to objective- c object
NIL -> Null-pointer to objective- c class
null-> null pointer to primitive type or absence of data
具体的用法:
看一下用法
NSURL *url = nil;
Class class = Nil;
int *pointerInt = NULL;
nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空,这些可以理解为nil,Nil,NULL的区别 本博客学习自:大佬博客
|