Как очистить словарь?

Я в настоящее время делаю следующее для убирания NSMutableDictionary

[myDictionary release];
myDictionary = [[NSMutableDictionary alloc] init];

Строка выпуска на самом деле не выпускает объектов в словаре. Я могу все еще видеть всех их на следующей строке. Только когда строка выделения выполняется, словарь обнуляется. Существует ли лучший способ сделать это?

19
задан 4thSpace 31 December 2009 в 21:28
поделиться

3 ответа

Я не могу его сейчас проверить, но пробовали ли вы метод removeAllObjects из NSMutableDictionary?

http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSMutableDictionary_Class/Reference/Reference.html#//apple_ref/occ/instm/NSMutableDictionary/removeAllObjects

34
ответ дан 30 November 2019 в 02:00
поделиться

-removeAllObjects сработает, как упоминал Энди. Однако, если какой-нибудь из объектов вашего словаря будет автоматически освобожден, или если сам словарь был автоматически освобожден где-то вдоль линии, то они не будут освобождены до следующего завершения runloop (когда пул авторелиза будет слит).

6
ответ дан 30 November 2019 в 02:00
поделиться

Вы Скажем:

линия выпуска на самом деле Отпустите любые объекты в словаре. Я все еще могу видеть все их на Следующая строка. Это не до alloc линия выполнена, что словарь оборудован. Есть ли способ лучше Чтобы это сделать?

Если -Release -реализация из музейного словаря приводит к тому, что словарь будет отделен - падает удерживаемое количество до нуля - тогда вомируемый словарь выпустит все содержащиеся объекты. Всегда.

Таким образом, если объекты не освобождаются, то это предложило «исправить» ...

[myDictionary removeAllObjects];
[myDictionary release];
myDictionary = [[NSMutableDictionary alloc] init];

... это утечка памяти в том, что исходный экземпляр NSMutballySysAry будет протекать.

В результате вызов -ReMovealLObjects будет пустое словарь и освободить все содержащиеся объекты, , но у вас все еще есть утечка памяти, которую вы должны выяснить и исправить.


Быть тупым:

Если объекты в вашем словаре не оформлены, когда словарь получает вышеупомянутую -Release (без вызова -ReMovealLObjects ), то есть утечка памяти. Это либо:

  1. Объекты в словаре имеют был сохранен дополнительное время.

  2. Есть еще выдающийся -RETAIN в словаре.

Поскольку вы говорите, что объекты правильно (как в, как и ожидалось), освобождены при вызове -ReMovealLObjects , то он должен быть (2). Просмотрите свой код и выясните, где есть дополнительный -RETAIN словаря. Вы можете использовать Alloc Alloc , чтобы выяснить, где происходит все сохранности.

30
ответ дан 30 November 2019 в 02:00
поделиться