Утечка памяти в постоянное хранилище - PullRequest
1 голос
/ 09 августа 2011

Я унаследовал код для приложения iPhone с использованием Core Data, написанного другой командой. Рассматривая отношения между объектами и то, как объекты создаются / используются в коде, я пришел к выводу, что произошла утечка памяти в постоянное хранилище. Конечно, когда я удаляю все объекты верхнего уровня из Базовых Данных там, где объекты остались позади. Более того, была операция, при которой значения / отношения одного объекта копировались в другой, и это оставляло осиротевшие объекты в Базовых данных.

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

Моей первоначальной мыслью было скопировать объекты верхнего уровня в другой ManagedObjectContext. Затем удалите все объекты из исходного контекста. Наконец, скопируйте объекты верхнего уровня обратно в исходный контекст. Кто-нибудь видит какие-либо проблемы с этим или есть лучшая идея?

1 Ответ

1 голос
/ 09 августа 2011

У потерянных объектов должно быть пустое отношение, чтобы вы могли просто извлечь это пустое отношение и удалить возвращенные объекты.

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

...