这是我看到的上下文:
NSMutableArray *controllers = [[NSMutableArray alloc] init];
for (unsigned i = 0; i < kNumberOfPages; i++) {
[controllers addObject:[NSNull null]];
}
为什么不在那个地方为零?
这是我看到的上下文:
NSMutableArray *controllers = [[NSMutableArray alloc] init];
for (unsigned i = 0; i < kNumberOfPages; i++) {
[controllers addObject:[NSNull null]];
}
为什么不在那个地方为零?
直接来自苹果:
NSNull 类定义了一个单例对象,用于在禁止将 nil 作为值的情况下(通常在数组或字典等集合对象中)表示空值。
因此,在您的示例中,这正是正在发生的事情,程序员选择将一个空对象放入控制器数组中,其中不允许将 nil 作为值。
您不能将nil
值添加到NSArray
or NSMutableArray
。如果您需要存储一个nil
值,则需要使用NSNull
包装类,如您所拥有的片段所示。这是在文档中指定的。
我们都同意 [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]
集合类喜欢NSArray
并且NSDictionary
不能包含nil
值。NSNULL
专门作为nil
. 它可以放入集合类中,并且只占用空间。
NSNull
定义了一个单例对象,这意味着只有一个 NSNull 实例(您使用创建的[NSNull null]
),但它可以在任意多的地方使用。
NSNull 类定义了一个单例对象,用于在禁止将 nil 作为值的情况下(通常在数组或字典等集合对象中)表示空值。
您不能将 nil 值添加到 NSArray 或 NSMutableArray。如果需要存储 nil 值,则需要使用 NSNull 包装类。
像 NSArray 和 NSDictionary 这样的集合类不能包含 nil 值。NSNULL 是专门作为 nil 的占位符创建的。它可以放入集合类中,并且只占用空间。
请参阅链接以供参考
nil 在对象数组之后标记数组的结尾...