和nil有什么区别?

以下是我所见的情况:

NSMutableArray *controllers = [[NSMutableArray alloc] init]; for (unsigned i = 0; i < kNumberOfPages; i++) { [controllers addObject:[NSNull null]]; } 

为什么不在那个地方?

直接从苹果 :

NSNull类定义了一个单例对象,用于在nil被禁止作为值的情况下(通常在数组或字典等集合对象中)表示空值。

所以在你的例子中,这正是发生了什么事情,程序员正在select将一个空对象放入控制器数组,其中nil不允许作为一个值。

您不能将一个nil值添加到NSArrayNSMutableArray 。 如果你需要存储一个nil值,你需要使用NSNull包装类,如你所拥有的片段所示。 这是在文档中指定的。

NSArrayNSDictionary集合类不能包含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标志着一个数组后面的数组的末尾…