iOS中的nil NULL
来源:互联网 发布:阿里云ssh连接 编辑:程序博客网 时间:2024/05/16 09:57
nil用来给对象赋值(oc的任何对象都属于id类型),NULL则给任何指正赋值,NULL和nil不能互换,nil用于类指针赋值(在oc中类是一个对象,是类的meta-class的实例),而NSNull则用于集合操作,虽然它们表示的都是空值,但使用场合完全不同,所以在编码时要严格按照变量类型来赋值,将正确的空值赋给正确的类型,使代码抑郁阅读和维护,也不易引起错误。
//判断字典对象的元素是否为空
Oc有个特性,就是当发送消息给nil对象时,系统返回0值而不是引起异常,这和java烦人的NullPointerException以及C/C++的程序直接崩溃的处理完全不同,明白Oc的这个特性对于开发正确的ios程序非常重要,因为nil是对象的合法值,nil对象同样可以接受消息。eg:
将对象置空,然后发送消息,程序同样接着往下执行而不会崩溃。
对象以为空,获取的数据可能已经不正确,这段代码将打印如下。
number = 0.00
空值处理不当是引起程序错误乃至崩溃的重要原因之一。
因为oc的集合对象,如NSArray,NSDictionary,NSSet等,都有可能包含NSNull对象,所以,如果以下代码中的item为NSNull,则会引起程序崩溃。
以下代码时常见的错误,release对象没有设置为nil,从而引起程序崩溃。
//判断对象不为空
- if (object) {}
//判断对象为空
- if (object == nil) {}
NSArray *pageNames = [[NSArrayalloc] initWithObjects:@"Document", @"Advanced", @"Statistics", nil ];
//判断数组元素是否为空
- UIViewController *controller = [NSArray objectAtIndex:i];
- if ((NsNull *)controller == [NSNull null]) {}
//判断字典对象的元素是否为空
- NSString *userId = [NSDictionaryobjectForKey:@"key"];
- if (userId == [NSNullnull]) {}
Oc有个特性,就是当发送消息给nil对象时,系统返回0值而不是引起异常,这和java烦人的NullPointerException以及C/C++的程序直接崩溃的处理完全不同,明白Oc的这个特性对于开发正确的ios程序非常重要,因为nil是对象的合法值,nil对象同样可以接受消息。eg:
- person = nil;
- [person castBallot];
- NSLog(@"person = %@", person);
将对象置空,然后发送消息,程序同样接着往下执行而不会崩溃。
- NSDecimalNumber *number = nil;
- NSLog(@"number = %.2f", [number doubleValue]);
对象以为空,获取的数据可能已经不正确,这段代码将打印如下。
number = 0.00
空值处理不当是引起程序错误乃至崩溃的重要原因之一。
因为oc的集合对象,如NSArray,NSDictionary,NSSet等,都有可能包含NSNull对象,所以,如果以下代码中的item为NSNull,则会引起程序崩溃。
- NSString *item = [NSArray objectAtIndex:i];
- if ([item isEqualToString:@"test"]) {
- }
以下代码时常见的错误,release对象没有设置为nil,从而引起程序崩溃。
- id someObj = [[Objectalloc] init];
- ...
- [someObj release];
- ...
- if (someObj) {
- }
0 0
- iOS中的nil NULL
- iOS-Objective-C中的nil、Nil、NULL、NSNull、NSNotFound总结
- iOS nil NULL NSNull
- iOS 【nil,NULL,NSNULL】
- iOS 中 nil, Nil, NULL 理解区分
- IOS中nil/Nil/NULL的区别
- IOS注意之nil,Nil,NULL,NSNull
- IOS-nil,Nil和NULL的区别
- ios nil Nil NULL NSNull区别
- iOS中nil,Nil,NULL的区别
- ios中NULL nil Nil的区别
- iOS nil, Nil, NSNull NULL的区别
- iOS空值--nil,Nil,NULL,NSNull
- iOS - nil、Nil、NULL、NSNull简单介绍
- ios nil Nil Null NSNull的区别
- ios nil Nil Null NSNull的区别
- ios nil Nil Null NSNull的区别
- iOS nil Nil NULL NSNull的区别
- os模块
- 百度地图之收索视野内的建筑物
- System.Data.OleDb.OleDbException: 无法从指定的数据表中删除
- PHP 利用Mail_MimeDecode类提取邮件正文
- Java中的equals()和hashCode()契约
- iOS中的nil NULL
- 浅谈个人知识管理
- annotation code for human pose estimation
- 点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
- Linux下vlc以root用户运行
- Jira
- SQL 多值检索
- 城管“认错人”连抽妇女十几耳光岂能记过了事
- C语言运行程序的存储区域