oc 基础知识总结三 nil、null、NULL、NSNull的区别
2015-12-31 15:43
330 查看
1、nil是一个对象,将对象设置为空,调用方法,不会产生crash或者抛出异常
NULL是一个值,将基本数据类型设置为空
如:
NSURL *url = nil; //nil是一个对象指针为空
Class class = Nil; //Nil是一个类指针为空
int *pointerInt = NULL; //NULL是基本数据类型为空
2、NSNULL、NULL、nil在本质上应该是一样的,NULL和nil其实就是0,但是在oc中,对于像NSArray这样的类型,nil或者NULL不能作为加到其中的Object,如果定义了一个NSArray,为其分配了内存,又想设置其中的内容为空,则可以使用【NSNULL
null】返回的对象初始化NSArray中的内容,类似于c中的malloc一个内存空间,然后用memset初始化这段空间里的值为0.
3、nil是对于oc id对象赋空值
对于oc集合类对象,如数组对象,字典对象,当我们不需要再使用他们的时候,对他们release的同时,最好也把他们赋值为nil,这样确保安全性。有时候不赋值为nil,可能导致程序崩溃。编程时对集合类对象先赋值nil,在将其release这样可以保证程序安全性。
Nil:表示对类进行赋空值。
NULL:用于对非对象指针赋空值,指向oc中基本数据类型的空指针,c语言的内存指针,nil之外的其他空值,如sel等
[NSApp beginSheet:sheet
modalForWindow:mainWindow
modalDelegate:nil //pointing to an object
didEndSelector:NULL //pointing to a non object/class
contextInfo:NULL]; //pointing to a non object/class
NSNULL:在集合对象中,表示空值的对象,有一个方法:
+(NSNull *)null;
若obj为nil:
【obj message】将返回NO,而不是NSException
若obj为NSNULL:
【obj message】将抛出异常NSException
空指针:是指该指针未指向一块有意义的内存区。
NSObject *obj1 = [[NSObject alloc] init];
NSObject *obj2 = [NSNull null];
NSObject *obj3 = [NSObject new];
NSObject *obj4;
NSArray *arr1 = [NSArray arrayWithObjects:obj1, obj2, obj3, obj4, nil];
NSLog(@"arr1 count: %ld", [arr1 count]); //count: 3 因为obj=nil,在加入obj4时就结束添加对象
NSObject *obj1;
NSObject *obj2 = [[NSObject alloc] init];
NSObject *obj3 = [NSNull null];
NSObject *obj4 = [NSObject new];
NSArray *arr2 = [NSArray arrayWithObjects:obj1, obj2, obj3, obj4, nil];
NSLog(@"arr2 count: %ld", [arr2 count]); //count: 0,因为obj1=nil,所以后面的对象没有添加进去
[NSNull null]通常作为占位符作用,如下:
NSObject *obj1 = [NSNull null];
NSArray *arr1 = [NSArray arrayWithObjects:@"One", @"TWO", obj1,@"three",nil];
for (NSString *str in arr1) {
NSLog(@"array object: %@", str);
} //result:One、Two、、three
NSObject *obj1 = [NSNull null];
NSArray *arr1 = [NSArray arrayWithObjects:@"One", @"TWO", obj1,@"three",nil];
for (NSString *str in arr1) {
if (str != [NSNull null]){
NSLog(@"array object: %@", str);
}
}//result:One、Two、three
NSNull:对于像NSArray类型,nil或NULL不能作为加到其中的Object,如果定义了一个NSArray,为其分配了内存,又想设置其中的内容为空,则可以用【NSNULL nill】返回的对象来初始化NSArray中的内容。
NULL是一个值,将基本数据类型设置为空
如:
NSURL *url = nil; //nil是一个对象指针为空
Class class = Nil; //Nil是一个类指针为空
int *pointerInt = NULL; //NULL是基本数据类型为空
2、NSNULL、NULL、nil在本质上应该是一样的,NULL和nil其实就是0,但是在oc中,对于像NSArray这样的类型,nil或者NULL不能作为加到其中的Object,如果定义了一个NSArray,为其分配了内存,又想设置其中的内容为空,则可以使用【NSNULL
null】返回的对象初始化NSArray中的内容,类似于c中的malloc一个内存空间,然后用memset初始化这段空间里的值为0.
3、nil是对于oc id对象赋空值
对于oc集合类对象,如数组对象,字典对象,当我们不需要再使用他们的时候,对他们release的同时,最好也把他们赋值为nil,这样确保安全性。有时候不赋值为nil,可能导致程序崩溃。编程时对集合类对象先赋值nil,在将其release这样可以保证程序安全性。
Nil:表示对类进行赋空值。
NULL:用于对非对象指针赋空值,指向oc中基本数据类型的空指针,c语言的内存指针,nil之外的其他空值,如sel等
[NSApp beginSheet:sheet
modalForWindow:mainWindow
modalDelegate:nil //pointing to an object
didEndSelector:NULL //pointing to a non object/class
contextInfo:NULL]; //pointing to a non object/class
NSNULL:在集合对象中,表示空值的对象,有一个方法:
+(NSNull *)null;
若obj为nil:
【obj message】将返回NO,而不是NSException
若obj为NSNULL:
【obj message】将抛出异常NSException
空指针:是指该指针未指向一块有意义的内存区。
NSObject *obj1 = [[NSObject alloc] init];
NSObject *obj2 = [NSNull null];
NSObject *obj3 = [NSObject new];
NSObject *obj4;
NSArray *arr1 = [NSArray arrayWithObjects:obj1, obj2, obj3, obj4, nil];
NSLog(@"arr1 count: %ld", [arr1 count]); //count: 3 因为obj=nil,在加入obj4时就结束添加对象
NSObject *obj1;
NSObject *obj2 = [[NSObject alloc] init];
NSObject *obj3 = [NSNull null];
NSObject *obj4 = [NSObject new];
NSArray *arr2 = [NSArray arrayWithObjects:obj1, obj2, obj3, obj4, nil];
NSLog(@"arr2 count: %ld", [arr2 count]); //count: 0,因为obj1=nil,所以后面的对象没有添加进去
[NSNull null]通常作为占位符作用,如下:
NSObject *obj1 = [NSNull null];
NSArray *arr1 = [NSArray arrayWithObjects:@"One", @"TWO", obj1,@"three",nil];
for (NSString *str in arr1) {
NSLog(@"array object: %@", str);
} //result:One、Two、、three
NSObject *obj1 = [NSNull null];
NSArray *arr1 = [NSArray arrayWithObjects:@"One", @"TWO", obj1,@"three",nil];
for (NSString *str in arr1) {
if (str != [NSNull null]){
NSLog(@"array object: %@", str);
}
}//result:One、Two、three
NSNull:对于像NSArray类型,nil或NULL不能作为加到其中的Object,如果定义了一个NSArray,为其分配了内存,又想设置其中的内容为空,则可以用【NSNULL nill】返回的对象来初始化NSArray中的内容。
相关文章推荐
- Tomcat的Session管理机制
- Certificate、Provisioning Profile、App ID
- Centos 6.5上安装配置KVM
- 不同框架实现的WebService的服务端获取HttpServletRequest
- Bootstrap Table简单例子学习
- 独木舟上的旅行(南阳oj71)(贪心)
- condor 使用详解
- condor 使用详解
- How do you simple use git repository
- cstring::getlength()
- leetcode刷题日记—— Binary Tree Level Order Traversal II
- openJPA从数据库生成代码操作
- 前后端分离的思考与实践(一)
- uboot系列之-----顶层Makefile分析(一)
- Hdu 2105
- java8.抽象类的应用
- 《写给25岁的我们》
- 易错点
- 简单了解将WordPress中的工具栏移到底部的小技巧
- 微信公众号API使用总结