У меня есть приложение для iOS, интенсивно использующее память, и я работаю над тем, чтобы использование памяти со временем не увеличивалось.У моего приложения есть «основной» контекст, который живет в течение всего срока службы приложения, при этом другие фоновые контексты иногда создаются для фоновых задач.
Одна вещь, которую я заметил, - это то, что NSManagedObjects, кажется, остаются зарегистрированными в основном контекстедолгосрочный и единственный способ по-настоящему восстановить всю память, связанную с извлечением объектов из БД, - это вызвать [NSManagedObjectContext reset]
.
. Это, конечно, приводит к хорошему снижению использования памяти, поскольку все зарегистрированные объектыиз недавно закрытых списков представления должным образом извлекаются из памяти, однако это раздражает, потому что вы только что аннулировали каждый объект, который был зарегистрирован в этом контексте, на который у вас все еще есть ссылка (то есть объекты, на которые ссылаются все еще открытые представления),и теперь вам нужно повторно извлечь все эти объекты из базы данных, чтобы избежать исключений для доступа к недействительному объекту.
Это единственный способ очистки зарегистрированного набора объектов из NSManagedObjectContext или естьлучшеспособ, который успешно удаляет все зарегистрированные объекты, на которые у вас больше нет ссылок, но не делает недействительными все NSManagedObjects, которые все еще живы?