0

ディスクに書き込みたくないので、エンティティと関係をメモリ内に維持するためにNSInMemoryStoreTypeforを使用しています。NSPersistentStoreCoordinator

そのため、コアデータオブジェクト参照がまだメモリ内にあるためにアプリメモリが増加し続けるため、特定の時点でメモリ内オブジェクトグラフをクリーンアップすることを計画しています。

メモリ内オブジェクト グラフからコア データ エンティティと関係全体を削除/リセット/削除して、アプリのメモリ使用量をクリーンアップする方法は?

NSInMemoryStoreType必要に応じてメモリを処理およびクリーンアップする最適化された方法はありますか?

注意: 私のアプリの展開ターゲットは iOS 8.0 以降です。そのため、クリーンアップ API は iOS 8 ターゲットでも利用できるはずです。

ありがとう!

4

2 に答える 2

0

インメモリ ストア コンテキストをクリーンアップするための回避策を見つけました。この回避策は、すべてではなく、メモリ内オブジェクト グラフから一部のメモリをクリーンアップすることです。

    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
    }

Jon Rose に感謝します: すべてのエンティティを削除する必要がある場合、エンティティが増えるため、パフォーマンスの問題が発生します。また、エンティティを削除するとすぐにメモリがクリーンアップされるかどうかもわかりません。

Sandeep Bhandari に感謝します: PersistentContainer は iOS 10 以降で利用でき、私のアプリは iOS 8 からサポートする必要があります。

また、コンテキストのリセットは、メモリのクリーンアップに影響を与えません。また、インメモリ コンテキスト/persistentStoreCoordinator をクリーンアップする他の方法があれば教えてください。

ありがとう!

于 2017-03-15T09:00:57.100 に答える