如何简洁地处理这种情况。我没有在contactDictionary
声明中正确发布if
...
NSNumber *pIDAsNumber;
...
NSMutableDictionary *contactDictionary = [NSMutableDictionary dictionaryWithDictionary:[defaults dictionaryForKey:kContactDictionary]];
if (!contactDictionary) {
contactDictionary = [[NSMutableDictionary alloc] initWithCapacity:1];
}
[contactDictionary setObject:pIDAsNumber forKey:[myClass.personIDAsNumber stringValue]];
[defaults setObject:contactDictionary forKey:kContactDictionary];
答案 0 :(得分:3)
通常,使用[NSMutableDictionary dictionaryWithCapacity:1]
而不是alloc / init。这将为您提供一个自动释放的字典,从内存管理的角度来看,它将与上面的字典完全相同。然而...
在这种特定情况下,你的if子句永远不会成立(除非你内存不足,在这种情况下你会遇到更大的问题)。如果传递的是-dictionaryWithDictionary:
,则返回一个空字典而不是nil。因此,即使-dictionaryForKey:
返回nil,-dictionaryWithDictionary:
仍会创建一个空的可变字典供您添加。
答案 1 :(得分:0)
您可以完全删除if
语句,因为-[NSMutableDictionary dictionaryWithDictionary:]
始终会返回字典。
另外,不要使用[NSMutableDictionary dictionaryWithCapacity:1]
来获取一个空的,自动释放的可变字典。只需使用[NSMutableDictionary dictionary]
。