Выпуск Quickie - PullRequest
       32

Выпуск Quickie

0 голосов
/ 23 апреля 2010

Как кратко справиться с этой ситуацией. Я не правильно выпускаю 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];

Ответы [ 2 ]

3 голосов
/ 23 апреля 2010

Обычно, используйте [NSMutableDictionary dictionaryWithCapacity:1] вместо alloc / init. Это даст вам автоматически выпущенный словарь, который с точки зрения управления памятью будет вести себя идентично приведенному выше. Однако ...

В этом конкретном случае ваше условие if никогда не будет истинным (если только у вас не хватает памяти, и в этом случае у вас возникают большие проблемы). -dictionaryWithDictionary: возвращает пустой словарь, а не ноль, если ему передан ноль. Таким образом, даже если -dictionaryForKey: вернет nil, -dictionaryWithDictionary: все равно создаст пустой изменяемый словарь для добавления.

0 голосов
/ 23 апреля 2010

Вы можете полностью удалить оператор if, потому что -[NSMutableDictionary dictionaryWithDictionary:] всегда возвращает словарь.

Кроме того, не используйте [NSMutableDictionary dictionaryWithCapacity:1], чтобы получить пустой, автоматически возвращаемый изменяемый словарь.Просто используйте [NSMutableDictionary dictionary].

...