资源描述:
《nil、Nil、NULL和NSNull的区别及使用.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、⼀、简介初学iOS,⾥⾯的nil,Nil,NULL及NSNull把我搞得有点晕。今天把他们归纳总结⼀下。⼆、概念nil:指向oc中对象的空指针Nil:指向oc中类的空指针NULL:指向其他类型的空指针,如⼀个c类型的内存指针NSNull:在集合对象中,表⽰空值的对象若obj为nil:[objmessage]将返回NO,⽽不是NSException若obj为NSNull:[objmessage]将抛出异常NSException三、理解nil和NULL从字⾯意思来理解⽐较简单,nil是⼀个对象,⽽NULL是⼀个值,
2、我的理解为nil是将对象设置为空,⽽NULL是将基本类型设置为空的。⽽且我们对于nil调⽤⽅法,不会产⽣crash或者抛出异常。看⼀下⽤法NSURL*url=nil;Classclass=Nil;int*pointerInt=NULL;nil是⼀个对象指针为空,Nil是⼀个类指针为空,NULL是基本数据类型为空。这五个概念很容易混淆,在⼀些场合下他们具有同样的⽤法。⾸先解释⼀下“空指针”意思,空指针是指该指针未指向⼀块有意义的内存区。如int*p;int*p=NULL;NSObject*obj1=[[NSObj
3、ectalloc]init];NSObject*obj2=[NSNullnull];NSObject*obj3=[NSObjectnew];NSObject*obj4;NSArray*arr1=[NSArrayarrayWithObjects:obj1,obj2,obj3,obj4,nil];NSLog(@"arr1count:%ld",[arr1count]);//count:3因为obj=nil,在加⼊obj4时就结束添加对象NSObject*obj1;NSObject*obj2=[[NSObjectall
4、oc]init];NSObject*obj3=[NSNullnull];NSObject*obj4=[NSObjectnew];NSArray*arr2=[NSArrayarrayWithObjects:obj1,obj2,obj3,obj4,nil];NSLog(@"arr2count:%ld",[arr2count]);//count:0,因为obj1=nil,所以后⾯的对象没有添加进去[NSNullnull]通常作为占位符作⽤,如下:NSObject*obj1=[NSNullnull];NSArray*a
5、rr1=[NSArrayarrayWithObjects:@"One",@"TWO",obj1,@"three",nil];for(NSString*strinarr1){NSLog(@"arrayobject:%@",str);}//result:One、Two、、threeNSObject*obj1=[NSNullnull];NSArray*arr1=[NSArrayarrayWithObjects:@"One",@"TWO",obj1,@"three",nil];for(NSString*strinarr
6、1){if(str!=[NSNullnull]){NSLog(@"arrayobject:%@",str);}}//result:One、Two、three四、使⽤定义1)nil指向⼀个对象的指针为空在objc.h中的定义如下所⽰:#ifndefnil#if__has_feature(cxx_nullptr)#definenilnullptr#else#definenil__DARWIN_NULL#endif#endif在Objective-C中⽤于id类型的对象NSString*name=nil;NSURL*ur
7、l=nil;idobject=nil;2)Nil指向⼀个类的指针为空定义如下:#ifndefNil#if__has_feature(cxx_nullptr)#defineNilnullptr#else#defineNil__DARWIN_NULL#endif#endif在Objective-C中⽤于Class类型的对象ClassaClass=Nil;ClsssbClass=[NSURLclass];3)NULL指向C类型的指针为空在stddef.h中定义如下:#ifdefined(__need_NULL)#undef
8、NULL#ifdef__cplusplus#if!defined(__MINGW32__)&&!defined(_MSC_VER)#defineNULL__null#else#defineNULL0#endif#else#defineNULL((void*)0)#endif多⽤于如下例⼦:int*pInt=NULL;char*chChar=NULL;structstStruct=NULL;4)N