Так что у некоторых, где у меня есть утечка, которая связана с удалением объекта при определенных обстоятельствах.
Предпосылка:
- У меня есть NSMutableArray объектов Tree (объект Tree знает, как рисовать себя).
- У меня есть указатель ссылки (Tree * selected), который в основном указывает на дерево, к которому я последний раз прикасался.
- Обратите внимание, что * выбранный указатель является слабой ссылкой.
Хорошо, пока все хорошо.
Проблема:
Утечка возникает, когда я удаляю дерево. Из списка я проверяю, что удаляемое дерево высвобождает все внутри, прежде чем удалить его из массива (удаление его из массива должно автоматически вызвать release для него).
Что я пробовал:
Я заметил, что моему выбранному древовидному указателю присваивается прикосновение к дереву через свойство self:
self.selected = дерево;
... и, делая это, я знаю, что это сохраняется. Итак, что я пытался сделать, это позвонить:
[self.selected release];
Я назвал это сразу после удаления дерева из массива.
... но в этот момент происходит сбой, по сути, заявив, что он уже выпущен.
Вопрос:
Почему я получаю это сообщение об ошибке? Я удалил его из массива, однако мой указатель self.selected все еще имеет оставшееся количество, поэтому я не должен выпускать его?
Может быть, я должен установить его на ноль после процесса удаления?
Или, может быть, я должен установить его на автоматический выпуск ДО процесса удаления?