0

How to succinctly handle this situation. I'm not properly releasing contactDictionary in the if statement...

    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];
4

2 回答 2

3

通常,使用[NSMutableDictionary dictionaryWithCapacity:1]而不是 alloc/init。这将为您提供一个自动释放的字典,从内存管理的角度来看,它的行为与上述字典相同。然而...

在这种特定情况下,您的 if 子句永远不会为真(除非您的内存不足,在这种情况下您会遇到更大的问题)。-dictionaryWithDictionary:如果传入 nil,则返回一个空字典而不是 nil。因此,即使-dictionaryForKey:返回 nil,-dictionaryWithDictionary:仍然会创建一个空的可变字典供您添加。

于 2010-04-22T23:26:37.093 回答
0

您可以完全删除该if语句,因为-[NSMutableDictionary dictionaryWithDictionary:]总是返回一个字典。

此外,不要[NSMutableDictionary dictionaryWithCapacity:1]用于获取空的、自动发布的可变字典。只需使用[NSMutableDictionary dictionary].

于 2010-04-23T01:46:22.740 回答