Подтвердить что ты не робот

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

В настоящее время я делаю следующее, чтобы очистить NSMutableDictionary

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

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

4b9b3361

Ответ 2

Вы говорите:

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

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

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

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

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

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


Быть тупым:

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

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

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

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

Ответ 3

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

Ответ 4

[aMutableDictionary removeAllObjects];

из Документация Apple:

(void)removeAllObjects

Описание - Опорожняет словарь своих записей. Каждый ключ и соответствующий объект значения отправляется сообщение о выпуске.

Доступность - iOS (2.0 и новее)