【问题标题】:How to cleanup in-memory object graph of NSPersistentStoreCoordinator with NSInMemoryStoreType?如何使用 NSInMemoryStoreType 清理 NSPersistentStoreCoordinator 的内存对象图?
【发布时间】:2017-08-05 19:45:34
【问题描述】:

我使用NSInMemoryStoreType 代替NSPersistentStoreCoordinator 来维护内存中的实体和关系,因为我不想将其写入磁盘。

因此,由于核心数据对象引用仍在内存中,因此应用程序内存不断增加,因此我计划在某些时候清理内存中的对象图。

如何从内存对象图中删除/重置/移除整个核心数据实体和关系以清理应用内存使用情况?

是否有任何优化的方式来处理NSInMemoryStoreType 并在需要时清理内存?

请注意:我的应用的部署目标是 iOS 8.0 及更高版本。所以清理 API 应该也可用于 iOS 8 目标。

谢谢!

【问题讨论】:

    标签: ios core-data memory-management nspersistentstore


    【解决方案1】:

    我找到了清理内存存储上下文的解决方法。此解决方法是从内存对象图中清除一些内存,而不是所有内容。

        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,请告诉我。

    谢谢!

    【讨论】:

      【解决方案2】:

      只需像使用任何核心数据设置一样删除实体即可。

      【讨论】:

        猜你喜欢
        • 2014-05-24
        • 1970-01-01
        • 1970-01-01
        • 2014-10-26
        • 1970-01-01
        • 2011-04-28
        • 2010-10-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多