![](/img/trans.png)
[英]What's this (NSNull*)controller == [NSNull null] supposed to do? Why not just controller == nil?
[英]What are the differences between nil, NULL and [NSNULL nil]?
我得到了这样的错误 - *由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:** - [NSCFDictionary initWithObjects:forKeys:count:]:尝试在对象[0]处插入nil值(键:搜索)'
然后我尝试了下面的代码
if (Obj == (id)[NSNull null]) //Obj is an id
{
NSLog(@" Obj is (id)[NSNull null]");
}
else if (Obj == nil)
{
NSLog(@"Obj is nil");
}
else if (Obj == NULL)
{
NSLog(@"Obj is NULL");
}
else
{
NSLog(@"Obj is something else");
}
searchedDict = [NSDictionary dictionaryWithObject:Obj forKey:@"searched"];
我得到的NSLog消息是'Obj is nil'。
但是当我使用相同的上述代码时Obj是NSString并且我的应用程序由于nil值而被终止,我得到了NSLog消息为'Obj is(id)[NSNull null]'。
nil,NULL和[NSNULL nil]之间有什么区别?
是否存在不同类型的Null值? 如果是,如何检查这些空值 ?
谢谢 :-)
NULL
是指向指针的原始C样式值,该指针被认为指向没有显式地址。 它通常仅用于表示“未设置”或作为标记值 。
char * oldstring = NULL;
nil
是与Obj-C对象引用相同的Objective-C版本:
NSString * str = nil;
id foo = nil;
它们都被定义为等于零值,虽然你可以互换地使用它们,但前者主要在Obj-C中用于传统指针(比如将void *
上下文指针设置为NULL),并且nil
用于所有Obj- C对象引用。
存在差异是因为尽管Obj-C的语法恰好位于C语言之上,但语言的设计更高层次,其对象ID 在概念上与 “指针”不同。 因此为他们创造了一个特殊的哨兵。
[NSNull null]
是一个对象,旨在用于非常特定的情况(如插入集合),其中需要“非值”值,但不允许实际的nil
,并且必须使用对象。
请注意, nil
和NSNull
stringify非常相似: nil
stringifies as (null)
, NSNull
as <null>
。
[NSNull null]
是要在集合中插入的nil
值的包装器,如果它是您想要的。
NSNull类引用。
您也可以使用==
检查对象引用是否nil
。
nil
定义为: #define nil NULL
,是C NULL
Objective C等价物。
Nil用于对象指针
NULL用于非指针
[NSNULL null]是一个表示“nil”的对象,用于不允许使用nil值的情况(如Vince所指出的,例如在集合中,例如NSArray和NSDictionary)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.