[英]What's the difference between [NSNull null] and nil?
这是我看到的上下文:
NSMutableArray *controllers = [[NSMutableArray alloc] init];
for (unsigned i = 0; i < kNumberOfPages; i++) {
[controllers addObject:[NSNull null]];
}
为什么不在那个地方零?
直接来自Apple :
NSNull类定义了一个单例对象,用于在禁止nil作为值的情况下(通常在集合对象(如数组或字典)中)表示空值。
因此,在您的示例中,这正是发生的事情,程序员选择将空对象放入控制器数组中,其中nil不允许作为值。
您不能将nil
值添加到NSArray
或NSMutableArray
。 如果需要存储nil
值,则需要使用NSNull
包装类,如您所拥有的代码段所示。 这在文档中指定。
像NSArray
和NSDictionary
这样的集合类不能包含nil
值。 NSNULL
是专门为nil
创建的占位符。 它可以放入集合类中 ,只占用空间。
NSNull
定义了一个单例对象,这意味着只有一个NSNull实例(你使用[NSNull null]
创建),但它可以在你想要的任意数量的地方使用。
我们都同意[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] a isEqual:[NSNull null]
NSNull类定义了一个单例对象,用于在禁止nil作为值的情况下(通常在集合对象(如数组或字典)中)表示空值。
您不能将nil值添加到NSArray或NSMutableArray。 如果需要存储nil值,则需要使用NSNull包装类。
像NSArray和NSDictionary这样的集合类不能包含nil值。 NSNULL是专门为nil创建的占位符。 它可以放入集合类中,只占用空间。
请参阅链接以供参考
nil标记一个对象数组后数组的结尾...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.