50

这是我看到的上下文:

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

为什么不在那个地方为零?

4

6 回答 6

86

直接来自苹果

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

因此,在您的示例中,这正是正在发生的事情,程序员选择将一个空对象放入控制器数组中,其中不允许将 nil 作为值。

于 2009-05-07T19:43:34.537 回答
14

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

于 2009-05-07T19:46:07.653 回答
10

我们都同意 [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]");

输出:

2014-01-31 10:57:11.179 MCDocsApp[13266:a0b] 案例 1

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] isEqual:[NSNull null]

于 2014-01-31T16:06:22.927 回答
9

集合类喜欢NSArray并且NSDictionary不能包含nil值。NSNULL专门作为nil. 它可以放入集合类中,并且只占用空间。

NSNull定义了一个单例对象,这意味着只有一个 NSNull 实例(您使用创建的[NSNull null]),但它可以在任意多的地方使用。

于 2010-07-03T05:03:09.073 回答
0

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

您不能将 nil 值添加到 NSArray 或 NSMutableArray。如果需要存储 nil 值,则需要使用 NSNull 包装类。

像 NSArray 和 NSDictionary 这样的集合类不能包含 nil 值。NSNULL 是专门作为 nil 的占位符创建的。它可以放入集合类中,并且只占用空间。

请参阅链接以供参考

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/NumbersandValues/Articles/Null.html

于 2018-03-15T11:44:37.263 回答
-14

nil 在对象数组之后标记数组的结尾...

于 2010-08-12T15:04:14.650 回答