gpt4 book ai didi

iphone - nil、NULL 和 [NSNULL nil] 之间有什么区别?

转载 作者:太空狗 更新时间:2023-10-30 03:30:24 24 4
gpt4 key购买 nike

我遇到了这样的错误-

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: -[NSCFDictionaryinitWithObjects:forKeys:count:]: attempt to insert nil value atobjects[0] (key: searched)'

然后我尝试了下面的代码

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 风格值,该指针被认为指向没有显式地址。它通常只是用来表示“未设置”或作为 sentinel value .

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 aren't conceptually the same作为“指针”。因此,为他们创建了一个特殊的哨兵。

[NSNull null]是一个对象 that is intended在非常特定的情况下使用(比如插入到集合中),其中需要“非值”值,但实际 nil不允许,必须使用对象。

请注意 nilNSNull字符串化非常相似:nil字符串化为 (null) , 和 NSNull作为<null> .

关于iphone - nil、NULL 和 [NSNULL nil] 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6814427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com