Как очистить граф объекта в памяти NSPersistentStoreCoordinator с NSInMemoryStoreType?
Я использую NSInMemoryStoreType
за NSPersistentStoreCoordinator
поддерживать сущности и отношения в памяти, так как я не хочу записывать их на диск.
Поэтому я планирую очистить граф объектов в памяти в определенный момент, так как память приложения продолжает увеличиваться из-за ссылок на объекты основных данных, все еще находящихся в памяти.
Как удалить / сбросить / удалить все основные объекты данных и связи из графа объектов в памяти, чтобы очистить использование памяти приложения?
Есть ли оптимизированный способ справиться NSInMemoryStoreType
и очистка памяти при необходимости?
Обратите внимание: цель развертывания моего приложения - iOS 8.0 и выше. Поэтому API очистки должен быть доступен и для iOS 8.
Спасибо!
2 ответа
Просто удалите объекты так же, как и при настройке основных данных.
Я нашел обходной путь для очистки контекста хранилища в памяти. Этот обходной путь очищает часть памяти из графа объектов в памяти, а не все.
if inMemoryManagedObjectContext != nil{
if let stores = inMemoryManagedObjectContext.persistentStoreCoordinator?.persistentStores{
for store in stores{
do{
try inMemoryManagedObjectContext.persistentStoreCoordinator?.remove(store)
}catch{
print("Cleanup InMemoryManagedObjectContext error;\(error)")
}
}
}
inMemoryManagedObjectContext = nil
}
Спасибо Джон Роуз: Если мне придется удалить все объекты, это приведет к проблемам с производительностью, так как у меня будет больше объектов. Также я не уверен, что удаление сущностей немедленно очистит память.
Спасибо Sandeep Bhandari: PersistentContainer доступен для iOS 10 и выше, и Мое приложение должно поддерживать iOS 8.
Также сброс контекста не оказывает никакого влияния на очистку памяти. И, пожалуйста, дайте мне знать, если есть какой-либо другой способ очистки контекста в памяти /persistentStoreCoordinator.
Спасибо!