Ответ 1
Я не могу проверить это в данный момент, но вы пробовали метод removeAllObjects
NSMutableDictionary
?
В настоящее время я делаю следующее, чтобы очистить NSMutableDictionary
[myDictionary release];
myDictionary = [[NSMutableDictionary alloc] init];
Линия выпуска фактически не выпускает никаких объектов в словаре. Я все еще вижу их на следующей строке. Только после того, как строка выделения будет выполнена, словарь будет обнулен. Есть ли лучший способ сделать это?
Я не могу проверить это в данный момент, но вы пробовали метод removeAllObjects
NSMutableDictionary
?
Вы говорите:
Линия выпуска не на самом деле отпустите любые слова в словаре. Я все еще вижу их всех на следующая строка. Только после выполняется строка, что словарь обнуляется. Есть ли способ лучше сделать это?
Если -release
изменчивого словаря приводит к освобождению словаря, он уменьшает значение удержания до нуля - тогда изменяемый словарь освободит все содержащиеся объекты. Всегда.
Таким образом, если объекты не освобождаются, тогда это предлагается "исправить"...
[myDictionary removeAllObjects];
[myDictionary release];
myDictionary = [[NSMutableDictionary alloc] init];
... является утечкой памяти в том, что исходный экземпляр NSMutableDictionary будет просочиться.
В результате вызов -removeAllObjects
запустит словарь и освободит все содержащиеся объекты , но у вас все еще есть утечка памяти, которую вы должны выяснить и исправить.
Быть тупым:
Если объекты в вашем словаре не освобождаются, когда словарь получает вышеуказанный -release
(без вызова -removeAllObjects
), тогда происходит утечка памяти. Это либо:
Объекты в словаре было сохранено дополнительное время.
Есть еще выдающийся
-retain
в словаре.
Поскольку вы говорите, что объекты правильны (как в ожидании), освобожденные при вызове -removeAllObjects
, тогда это должно быть (2). Просмотрите свой код и выясните, где есть дополнительный -retain
словаря. Вы можете использовать инструмент Object Alloc, чтобы точно определить, куда берутся все сохранившиеся.
-removeAllObjects будет работать, как упомянул Энди. Тем не менее, если какой-либо из ваших объектов словаря автоматически отпущен или если сам словарь был автореализован где-то вдоль линии, то они не будут отменены до тех пор, пока в следующий раз runloop не закончится (когда пул авторекламы будет удален).
[aMutableDictionary removeAllObjects];
(void)removeAllObjects
Описание - Опорожняет словарь своих записей. Каждый ключ и соответствующий объект значения отправляется сообщение о выпуске.
Доступность - iOS (2.0 и новее)