NSDictionary的文档说如果NSDictionary不包含您的密钥,方法objectForKey
将返回nil
;然而,零是不是零?如果是这样,我怎么知道返回值是否意味着字典包含映射到零的键或者该键是否不存在?
答案 0 :(得分:7)
NSDictionaries(实际上,所有Cocoa集合对象)只能包含Objective-C对象,而不能包含int
等C基元。因此,如果您将0
存储在字典中,您可以这样做:
[myDictionary setObject:[NSNumber numberWithInt:0] forKey:@"myKey"];
因此,检索它将是这样的:
NSNumber* resultObj = [myDictionary objectForKey:@"myKey"];
if (resultObj == nil)
{
//Key didn't exist
}
else
{
int result = [resultObj intValue];
//Now do your work.
}
这种在对象中“包装”C基元以将其存储在集合中,然后在另一端“展开”它的概念在Cocoa中非常常见。 (如果您尝试使用非数字值,也可以查看NSValue
。)
答案 1 :(得分:2)
已修改虽然内存中的方向NULL
和nil
指向恰好是0x0
,但它始终存在并且可能始终存在,不能将该值用于其他目的,而是在内存中定义未定义的地址。在NULL
的情况下,它表示未定义的指针。 nil
表示未定义的对象指针。这些#define
背后的想法是,程序员和程序有一个严格的标准来知道和传递内存中未定义的地址,并且它可能会在新的编译器或标准中变为0x42
而NOTHING应该发生。因此,不要将nil
或NULL
视为0;是的,他们是,但这只是一个意外。这不是一个功能。
nil
与0不同。nil
是对象指针,0是数值