和nil有什么区别?
以下是我所见的情况:
NSMutableArray *controllers = [[NSMutableArray alloc] init]; for (unsigned i = 0; i < kNumberOfPages; i++) { [controllers addObject:[NSNull null]]; }
为什么不在那个地方?
直接从苹果 :
NSNull类定义了一个单例对象,用于在nil被禁止作为值的情况下(通常在数组或字典等集合对象中)表示空值。
所以在你的例子中,这正是发生了什么事情,程序员正在select将一个空对象放入控制器数组,其中nil不允许作为一个值。
您不能将一个nil
值添加到NSArray
或NSMutableArray
。 如果你需要存储一个nil
值,你需要使用NSNull
包装类,如你所拥有的片段所示。 这是在文档中指定的。
像NSArray
和NSDictionary
集合类不能包含nil
值。 NSNULL
是专门作为占位符创build的。 它可以放入collections课 ,只占用空间。
NSNull
定义了一个单例对象,这意味着只有一个NSNull实例(使用[NSNull null]
创build),但是它可以在任意位置使用。
我们都同意,如上所述,[NSNull null]作为需要对象的占位符是很有用的。 但是,除非明确将它用于指定对象,否则不应该用于比较,这是我过去犯的一个错误。
id a; NSLog(@"Case 1"); if (a == nil) NSLog(@"a == nil"); if (a == Nil) NSLog(@"a == Nil"); if ([a isEqual:[NSNull null]]) NSLog(@"a isEqual:[NSNull null]"); NSLog(@"Case 2"); a = [NSNull null]; if (a == nil) NSLog(@"a == nil"); if (a == Nil) NSLog(@"a == Nil"); if ([a isEqual:[NSNull null]]) NSLog(@"a isEqual:[NSNull null]");
输出:
案例1:2014年1月31日10:57:11.179 MCDocsApp [13266:a0b]
2014-01-31 10:57:11.179 MCDocsApp [13266:a0b] a == nil
2014-01-31 10:57:11.179 MCDocsApp [13266:a0b] a ==无
2014-01-31 10:57:11.180 MCDocsApp [13266:a0b]案例2
2014-01-31 10:57:11.180 MCDocsApp [13266:a0b] a isEqual:[NSNull null]
nil标志着一个数组后面的数组的末尾…