NSMutableDictionary键指向什么都没有

时间:2015-03-01 16:26:37

标签: ios nsmutabledictionary

我有一个NSMutableDictionary的NSArrays。我实际上想要指出的一些关键点。现在我使用NSArray *someArray=[[NSArray alloc] init];代表什么,即一个空数组。有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

您可以使用专为此类情况设计的NSNull单例实例:

dict[@"key"] = [NSNull null];

(它只是一个占位符对象,框架提供用于不接受nil值的集合。不要与实际的nil混淆当然)

答案 1 :(得分:1)

您应该使用NSNull来表示NSDictionary中的任何内容。

有人说,在你拥有对象之前,不更容易分配密钥吗?如果你指定NSNull,你需要测试与NSNull的相等性,因为测试你的字典[@" nullKey"]将总是返回YES,因为它确实有一个分配给它的对象。另一方面,如果你测试一个未分配的密钥,你将得到零,这可能是你想要的。

答案 2 :(得分:0)

您可以将@[]用于空数组,也可以使用[NSNull null]在集合类中表​​示空值,这完全取决于您要查找的语义。

我倾向于认为@[]更容易预测,因为你可以使用你期望的所有东西,迭代,-(NSUInteger)count等。

要检查空值,你必须明确检查... dict["key"] == [NSNull null],因为即使[NSNull null]是布尔值true,因为它是一个对象......

例如,这不起作用:

for (NSString *s in [NSNull null])
{
    printf("you will never get here!");
}

也不会:

id obj = [NSNull null];
[obj length];

printf("you wont get here");

所以它实际上取决于你想要如何构建你的流控制,因为如果你关心的是否存在键和值,那么你处于3状态逻辑......

使用NSNULL

if(!dict[somekey])
{
    //key not set
}else if (dict[somekey] == [NSNull null])
{
    //key set, but null
}else
{
    // should expect a real value
}

使用空白阵列

if(!dict[somekey])
{
    //key not set
}else if (![dict[somekey] count])
{
    //key set, but empty array
}else
{
    // should expect a real value
}