iOS:将数据存储在内存而不是磁盘上

时间:2018-04-16 16:14:46

标签: ios core-data in-memory-database nspersistentstore

我正在寻找一个关于如何在内存中而不是在磁盘上存储敏感数据的教程(10+)。我用谷歌搜索,但没有真正相关的东西出现。

我熟悉iOS,SQLite,Plist,核心数据,用户默认值和钥匙串的大多数数据存储选项。我知道Core Data有一个内存持久存储选项,但我不确定如何将其指定为我想要使用的那个。看看Apple文档和其他教程我只看到了持久性存储的实例化,但没有声明它是sqlite还是核心数据还是内存。

例如,Apple在核心数据堆栈上的文档:

import UIKit
import CoreData
class DataController: NSObject {
    var managedObjectContext: NSManagedObjectContext
    init(completionClosure: @escaping () -> ()) {
        persistentContainer = NSPersistentContainer(name: "DataModel")
        persistentContainer.loadPersistentStores() { (description, error) in
            if let error = error {
                fatalError("Failed to load Core Data stack: \(error)")
            }
            completionClosure()
        }
    }
}

这个问题似乎指向正确的方向(只是最初发布的代码)

Save In-Memory store to a file on iOS

- (NSPersistentStore *)addPersistentStoreWithType:(NSString *)storeType configuration:(NSString *)configuration URL:(NSURL *)storeURL options:(NSDictionary *)options error:(NSError **)error;

只是这样,传递一种类型?为了跟进,一旦应用程序关闭,内存数据就会被释放?

由于

1 个答案:

答案 0 :(得分:2)

由于您使用的是NSPersistentContainer,因此您可以告诉Core Data在NSPersistentStoreDescription实例中使用哪种商店。它有一个名为type的属性,可以接受NSInMemoryStoreType之类的值。设置描述然后将其分配给容器的persistentStoreDescriptions属性,您将获得一个内存存储。您提到的方法可行,但需要更改您的Core Data设置以删除NSPersistentContainer

顾名思义,它仅存在于内存中,因此当应用程序退出时,存储在那里的任何内容都会消失。