Не следует вмешиваться в управление контекстом управляемого объекта в памяти управляемых объектов.
Если self.image
выше - это управляемый объект, и вы не написали собственные средства доступа, то у вас нет проблем с управлением памятью из него.Любая попытка управлять памятью контекста вручную почти всегда вызывает больше проблем, чем решает.
Подсчет остатков ничего вам не скажет, кроме как в самых простых и маленьких приложениях командной строки.Как только вы используете такие среды, как Core Data, сохранение за кулисами становится настолько сложным, что счетчик хранения часто не имеет отношения к тому, что происходит в вашем собственном коде.
По-видимому, у «self.image.date =» есть одно удержание, которое никогда не освобождается (и я думаю, что оно находится между self.image и self).Из-за этого сам объект никогда не будет выпущен и, следовательно, утечка.
Это не произойдет.Вам не нужно уничтожать все объекты в сохраненных атрибутах экземпляра перед тем, как уничтожить сам экземпляр.Если это так, вы не можете уничтожить экземпляр, который совместно использует объект атрибута с третьим объектом.Если это были экземпляры неуправляемого объекта, объект self.image
может существовать еще долго после смерти объекта self
.Только применение графа сущностей контекстом заставляет их вести себя иначе, и это не имеет ничего общего с управлением памятью.
Если вы видите загадочный счет сохранения 1 на управляемом объекте, то есть сохранение, помещенное в объект контекстом управляемого объекта.Пока контекст полагает, что управляемый объект должен существовать в графе сущностей, он никогда не освободит объект.
Если утечка вообще присутствует в стеке основных данных, ваша проблема, скорее всего, связана с графом сущностей между сущностью self
и сущностью self.image
.Граф сущностей препятствует тому, чтобы один или другой объект был удален, скорее всего, путем отказа или обязательного отношения.