我怎么知道零的返回值对于ObjectiveD中的NSDictionary的objectForKey方法意味着什么?

时间:2012-02-05 01:27:22

标签: objective-c nsdictionary

NSDictionary的文档说如果NSDictionary不包含您的密钥,方法objectForKey将返回nil;然而,零是不是零?如果是这样,我怎么知道返回值是否意味着字典包含映射到零的键或者该键是否不存在?

2 个答案:

答案 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)

已修改虽然内存中的方向NULLnil指向恰好是0x0,但它始终存在并且可能始终存在,不能将该值用于其他目的,而是在内存中定义未定义的地址。在NULL的情况下,它表示未定义的指针。 nil表示未定义的对象指针。这些#define背后的想法是,程序员和程序有一个严格的标准来知道和传递内存中未定义的地址,并且它可能会在新的编译器或标准中变为0x42而NOTHING应该发生。因此,不要将nilNULL视为0;是的,他们是,但这只是一个意外。这不是一个功能。 nil与0不同。nil是对象指针,0是数值