零,零和[nsnull nil]之间有什么区别?
-
25-10-2019 - |
题
我有这样的错误 - *终止由于未被发现的例外“ nsinvalidargumentException”,原因:** - [nscfdictionary initwithObjects:forkeys:count:]:尝试在对象[0](键:搜索)''''
然后我尝试了以下代码
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是nil”。
但是,当我在OBJ为NSSTRING并且由于NIL值而被终止时使用了上述代码时,我收到了NSLOG消息,因为“ OBJ IS(ID)[nsnnull null]”。
零,零和[nsnull nil]之间有什么区别?
有不同种类的空值吗?如果是,如何通常检查这些空值?
谢谢 :-)
解决方案
NULL
是指向指针的原始C风格值,该值被认为指向没有明确的地址。通常只是用来表示“ unset”或 哨兵值.
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
弦乐非常相似: nil
串联为 (null)
, , 和 NSNull
作为 <null>
.
其他提示
[NSNull null]
是包装纸 nil
如果您想要的话,您想在集合中插入的价值。
nsnull 类参考。
您还可以在对象引用是否为之前检查 nil
简单地与 ==
.
还 nil
被定义为: #define nil NULL
并且是c的客观c NULL
.
零是用于对象指针
Null用于非指针
nsnull null]是一个对象,代表不允许零值的情况下使用“ nil”(如文斯指出的那样,例如在集合中,例如Nsarray和Nsdictionary)