iOS中nil、Nil、NULL、NSNull详解
ObjC里面的几个空值符号经常会差点把我搞死,这些基础的东西一点要弄清楚才行,以提高码农的基本素质。
nil
nil是ObjC对象的字面空值,对应id类型的对象,或者使用@interface声明的ObjC对象。
例如:
NSString*someString=nil; NSURL*someURL=nil; idsomeObject=nil; if(anotherObject==nil)//dosomething
定义:
//objc.h #ifndefnil #if__has_feature(cxx_nullptr) #definenilnullptr #else #definenil__DARWIN_NULL #endif #endif //__DARWIN_NULLin_types.h #define__DARWIN_NULL((void*)0)
Nil
Nil是ObjC类类型的书面空值,对应Class类型对象。
例如:
ClasssomeClass=Nil;
ClassanotherClass=[NSStringclass];
定义声明和nil是差不多的,值相同:
//objc.h #ifndefNil #if__has_feature(cxx_nullptr) #defineNilnullptr #else #defineNil__DARWIN_NULL #endif #endif
NULL
NULL是任意的C指针空值。
例如:
int*pointerToInt=NULL; char*pointerToChar=NULL; structTreeNode*rootNode=NULL;
定义:
//instddef.h #defineNULL((void*)0)
NSNull
NSNull是一个代表空值的类,是一个ObjC对象。实际上它只有一个单例方法:+[NSNullnull],一般用于表示集合中值为空的对象。
例子说明:
//因为nil被用来用为集合结束的标志,所以nil不能存储在Foundation集合里。
NSArray*array=[NSArrayarrayWithObjects:@"one",@"two",nil];
//错误的使用
NSMutableDictionary*dict=[NSMutableDictionarydictionary];
[dictsetObject:nilforKey:@"someKey"];
//正确的使用
NSMutableDictionary*dict=[NSMutableDictionarydictionary];
[dictsetObject:[NSNullnull]forKey:@"someKey"];
定义:
/*NSNull.h Copyright(c)1994-2012,AppleInc.Allrightsreserved. */ #import<Foundation/NSObject.h> @interfaceNSNull:NSObject<NSCopying,NSSecureCoding> +(NSNull*)null; @end
小结
虽然nil,Nil,NULL的值相同,理解它们之间的书面意义才重要,让代码更加明确,增加可读性。
以上所述就是本文的全部内容了,希望大家能够喜欢。