`
ff20081528
  • 浏览: 85838 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ios学习笔记之nil、NULL和NSNull

    博客分类:
  • ios
阅读更多
   nil用来给对象赋值(oc的任何对象都属于id类型),NULL则给任何指正赋值,NULL和nil不能互换,nil用于类指针赋值(在oc中类是一个对象,是类的meta-class的实例),而NSNull则用于集合操作,虽然它们表示的都是空值,但使用场合完全不同,所以在编码时要严格按照变量类型来赋值,将正确的空值赋给正确的类型,使代码抑郁阅读和维护,也不易引起错误。
     //判断对象不为空
   
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
3
分享到:
评论
3 楼 dingran 2013-01-07  
ff20081528 写道
dingran 写道
最后一个不明白,是说someObj被release之后再使用就不行了吗?

一个指针对象release之后,要将其指向nil,否则你根本就不知道这个指针指向哪里。


老兄,这就是传说中的野指针吗?根本不知道指向哪里,肯定是很危险的,是系统中的风险啊。鬼知道谁会不小心用了。
2 楼 ff20081528 2012-12-31  
dingran 写道
最后一个不明白,是说someObj被release之后再使用就不行了吗?

一个指针对象release之后,要将其指向nil,否则你根本就不知道这个指针指向哪里。
1 楼 dingran 2012-12-31  
最后一个不明白,是说someObj被release之后再使用就不行了吗?

相关推荐

    IOS 基础之nil,NULL,NSNULL区别详解

    IOS 基础之nil,NULL,NSNULL区别详解 ① nil:一般赋值给空对象。 ② NULL:NULL 是一个通用指针(泛型指针)。 一般赋值给 nil 之外的其他空值。如SEL等。 ③ NSNULL:[NSNull null] 是一个对象,他用在不能使用 ...

    总结IOS中nil、Nil、NULL和NSNull区别

    在Objective-C编程中,了解nil、Nil、NULL和NSNull之间的区别至关重要,因为它们在不同场景下有着不同的用途和含义。下面将逐一详细介绍这些概念。 1. **NULL** NULL是C语言中的一个宏,用来表示空指针。在C语言中...

    iOS中nil、Nil、NULL、NSNull详解

    在iOS开发中,我们经常会遇到各种表示空值的符号,如nil、Nil、NULL和NSNull。理解它们的区别和用途是编写清晰、可维护代码的关键。 1. nil nil是Objective-C中的对象空值,主要用于表示id类型或者使用@interface...

    ios-后台返回数据排空(nsnull nil)处理.zip

    在iOS开发中,后台返回的数据排空,即`...通过以上方法,开发者可以在iOS应用中有效地处理后台返回的`NSNull`和`nil`数据,提高应用的健壮性和用户体验。在实际开发中,应结合项目需求和团队规范灵活运用这些策略。

    ios-清理模型中的nil.zip

    标题"ios-清理模型中的nil.zip"所涉及的内容就是关于如何在模型转换过程中有效地处理这些`nil`或`null`值,以避免程序运行时出现异常。 描述中提到的"清理字典转模型后模型中的nil,属性多于字典,服务器返回为null...

    ios学习笔记 --sqllite3

    这篇“iOS学习笔记 --SQLite3”旨在帮助新手掌握如何在iOS应用中使用SQLite3进行数据管理,包括创建数据库、插入数据、查询数据等基本操作。 首先,我们需要了解SQLite3的基本概念。SQLite3是一个嵌入式的关系型...

    IOS 去null

    这段Swift代码扩展了Dictionary,使得在访问字典元素时,如果键对应的值是null或NSNull,它会返回nil,而不是引发异常。 总结来说,"iOS jason 去null"是一个关于如何在解析JSON时安全处理null值的技术,主要通过...

    lua-cjson decode中null改成nil

    请注意,这样做可能会打破一些期望`nil`的行为,因为在Lua中,`nil`和任何值都不相等,而`"null"`字符串与其他字符串或变量可以进行比较。因此,如果你的代码依赖于`nil`的这种特性,可能会导致意外的结果。在进行...

    IOS 开发之对象为空的判断(nil、null)详解

    总之,理解和正确使用`nil`和`null`,以及它们与不同对象类型的交互,是iOS开发中必不可少的技能。通过上述的判断方式,开发者可以确保在处理可能为空的对象时避免运行时错误,从而提高应用的稳定性和用户体验。希望...

    ios学习笔记之基础数据类型的转换

    本文将深入探讨iOS中常见的数据类型转换,包括NSString、NSData、NSArray、NSDictionary等之间的转换,以及布尔类型、枚举类型、nil、NULL和NSNull的区别,还有id类型的使用。 首先,我们关注NSString的数据转换。...

    iOS学习笔记

    在iOS开发过程中,掌握一些基础和实用的技巧是至关重要的。以下是一些我在学习iOS时总结的知识点,希望对你也有帮助: 1. **关闭键盘方法**:在iOS中,你可以通过调用`resignFirstResponder`方法来关闭当前的文本...

    iOS中json解析出现的null,nil,NSNumber的解决办法

    通过以上方法,可以有效地处理iOS开发中JSON解析时遇到的`null`、`nil`和`NSNumber`问题,确保应用的稳定性和安全性。在实际开发中,选择最适合项目需求的解决方案,并保持代码的可读性和可维护性。

    iOS 泛型中nullable、null resettable、null kindof 用法详解

    在iOS开发中,特别是在使用Swift或Objective-C进行编程时,理解并正确使用泛型中的`nullable`、`null_resettable`、`null kindof`关键字至关重要。这些关键字用于明确表示对象是否可以为`nil`,这有助于防止因意外的...

    son数据去除nsnull

    当我们在Objective-C代码中解析JSON数据并尝试访问一个值为`null`的键时,会得到一个`NSNull`对象,而不是nil。这可能会导致一些未预期的行为,尤其是在进行条件判断或者遍历字典时。 要处理这种情况,有几种方法...

    Start Developing iOS Apps Today(objective-c)

    此外,处理nil值时可使用NSNull来表示空值。 7. 自定义类和对象: 开发者还需学会如何编写自定义类,包括声明和实现类,以及如何定义类的接口和实现部分。对象的数据属性和行为方法也是构建应用程序时必须掌握的...

Global site tag (gtag.js) - Google Analytics