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

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

我正在寻找有关如何将敏感数据存储在内存中而不是 iOS (10+) 磁盘上的教程。我用谷歌搜索,但没有找到真正相关的内容。

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

例如,Apple 在 Core Data 堆栈上的文档:

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;

只是传递一个类型吗?后续,应用程序关闭后,内存中的数据会被释放吗?

谢谢

最佳答案

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

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

关于iOS:将数据存储在内存中而不是磁盘上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49861852/

相关文章:

ios - 在 xcode/模拟器中启用 iPad pro

iphone - 多种语言的多个 SQLite 数据库?

java - JUnit + Derby + Spring : drop in-memory db after every test

iphone - iOS锁屏应用启动

ios - 将数据从 tableView 传递到另一个 tableView

ios - 管理iOS应用常量数据: classes/objects or database

iOS - 核心数据自动生成模型 - 无法识别的选择器

ios - NSDecimalNumber 总和

c# - 将磁盘上的SQLite数据库加载到内存数据库中并进行同步

sqlite - 如何为内存数据库中的 SQLite 分配名称