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) {
}
分享到:
相关推荐
IOS 基础之nil,NULL,NSNULL区别详解 ① nil:一般赋值给空对象。 ② NULL:NULL 是一个通用指针(泛型指针)。 一般赋值给 nil 之外的其他空值。如SEL等。 ③ NSNULL:[NSNull null] 是一个对象,他用在不能使用 ...
相信有不少朋友想知道,在 Objective-C 中 nil 和 Nil 以及 NULL 的区别。最重要的是,在面试中还有不少朋友常会被问到。现在小编在这里统一详细说明。
主要介绍了iOS中nil、Nil、NULL、NSNull详解的相关资料,需要的朋友可以参考下
清理字典转模型后模型中的nil,属性多于字典,服务器返回为null等情况
服务器不靠谱? 总是数据崩溃? 试试呗!
IOS 开发之对象为空的判断(nil、null)详解 前言: 在开发中,会遇到很多空的情况,有时候取得对象(null),还有时候会得到<null>的情况,我们需要判断是否为空,进行return; id result; // 针对(null)这种...
在iOS开发过程中经常需要与服务器进行数据通讯,Json就是一种常用的高效简洁的数据格式,通过本文给大家介绍iOS中json解析出现的null,nil,NSNumber的解决办法,感兴趣的朋友参考下
lua-cjson lua的cjson库 decode略做修改 结果中null还原成nil
C学习资料汇总专题资源目录:【】Objective-C NSAutoreleasePool【】Objective-c 中 nil, Nil, NULL和NSNull的区别【】Objective-C 中self 和 super【】Objective-C 的编程之道【】Objective-C_2-1.0_Mac和iOS开发 ...
一个关于数组越界、字典key与value为nil情况下导致的低级错误的线上Crash的避免的仓库
ios初级代码 1.oc中的set和get方法 1>.首先NewFile创建类,选iOS中的Cocoa Touch,再点击Objective-C class,输入类名Student,作为NSobject(系统 自带)的子类 2>.在.h中做方法的声明 在Student.h中: //@...
将所有其他nil值转换为null。 例子 var noNil = require ( 'no-nil' ) ; var input = [ 1 , undefined ] ; console . log ( noNil ( input ) ) ; // [1]; ##执照 The MIT License (MIT) Copyright (c) 2015 ...
1.数组越界,nil值初始化导致的崩溃 2.对字典插nil值,或者读取NSNULL导致的崩溃 3.字符串的截取越界导致的崩溃 4.doesNotRecogniz
Null passed to a callee that requires a non-null argument 此警告就是某属性说好的不能为空,你又在某地方写了XX = nil 所以冲突了 这个警告比较新,是xcode6.3开始 为了让OC也能有swift的?和!的功能,你在声明...