Как очистить граф объектов в памяти NSPersistentStoreCoordinator с помощью NSInMemoryStoreType?

Я использую NSInMemoryStoreType вместо NSPersistentStoreCoordinator для хранения сущностей и отношений в памяти, так как не хочу записывать их на диск.

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

Как удалить/сбросить/удалить все основные объекты данных и отношения из графа объектов в памяти, чтобы очистить использование памяти приложения?

Есть ли какой-либо оптимизированный способ обработки NSInMemoryStoreType и очистки памяти при необходимости?

Обратите внимание: цель развертывания моего приложения — iOS 8.0 и выше. Таким образом, API очистки должен быть доступен и для цели iOS 8.

Спасибо!


person Natarajan    schedule 15.03.2017    source источник


Ответы (2)


Просто удалите сущности, как если бы вы делали это при любой настройке основных данных.

person Jon Rose    schedule 15.03.2017

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

    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
    }

Спасибо. Джон Роуз: если мне придется удалить все сущности, это приведет к проблемам с производительностью, поскольку у меня больше сущностей. Также я не уверен, что удаление сущностей немедленно очистит память.

Спасибо, Сандип Бхандари: PersistentContainer доступен для iOS 10 и выше, а мое приложение должно поддерживать iOS 8.

Также сброс контекста не влияет на очистку памяти. И, пожалуйста, дайте мне знать, если есть какой-либо другой способ очистки контекста в памяти/persistentStoreCoordinator.

Спасибо!

person Natarajan    schedule 15.03.2017