Избегайте накопления зарегистрированных объектов (утечки памяти) в NSManagedObjectContext

У меня есть приложение iOS, интенсивно использующее память, и я работаю над тем, чтобы использование памяти не превышало время. У моего приложения есть «основной» контекст, который существует в течение всего времени существования приложения, а другие более мелкие контексты иногда создаются для фоновых задач.

Я заметил одну вещь: NSManagedObjects, похоже, остаются зарегистрированными в основном контексте долгое время и единственный способ по-настоящему освободить всю память, связанную с извлечением объектов из БД, - это вызвать [NSManagedObjectContext reset] .

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

Является ли это единственным способом очистки зарегистрированного набора объектов из NSManagedObjectC ontext, или есть лучший способ, который успешно удаляет все зарегистрированные объекты, на которые у вас больше нет ссылок, но не делает недействительными все NSManagedObjects, которые все еще живы?

10
задан glenc 21 June 2011 в 20:44
поделиться