swift - 我应该使用 NSUserDefault 还是 CoreData 来保存最后十个分数?

标签 swift core-data struct nsuserdefaults

现在我有一个包含多个字典和字符串的struct,它保存每个级别的用户分数以及他们输入的用户名。然后,我将 struct 分数保存到 NSUserdefault 中。

struct Scores: Codable {
    var userName: String = ""
    var totalScore: Int = 0
    var highScore: [String : Int] = [:]
    var scoreA: [String : Int]  = [:]
    var scoreB: [String : Int] = [:]
}

UserDefaults.standard.set(try? PropertyListEncoder().encode(scores), forKey:"scores_1")

这很有效,但我需要保存用户最近的十个分数。我想知道我是否应该使用 core-data 还是继续使用 NSUserdefaults?不确定哪个是最佳实践。

编辑:我应该将数据保存在 .json 文件中吗?

最佳答案

UserDefaults 最适合存储少量数据,而不是数组。

每次调用该键时,存储它的整个 plist 文件都会被调用到内存中。

例如)

let volumeLevel = UserDefaults.Standard.integer(forKey: "volume")

因此,如果您存储的数组每次用户玩游戏时都会增长,最终您将遇到内存问题。

在上面的示例中,使用 UserDefaults 来存储 High Score 和 UserName 就可以了,但我建议使用 CoreData(或其他东西)来存储包含每次运行游戏的数据的数组。

关于swift - 我应该使用 NSUserDefault 还是 CoreData 来保存最后十个分数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53999108/

相关文章:

ios - 将 persistenceStoreCoordinator sqlite 文件迁移到新名称

objective-c - 如何确定/控制托管对象模型 (.mom) 文件的存储位置?

go - 方法在结构副本上的应用反射(reflect)在原始结构中

swift - 让 Swift 应用程序使用未签名的证书在本地工作

ios - 如何为自定义单位定义详细描述

swift - 快速获取图像的 Alpha 百分比

swift - 无法构建 Objective-C 模块 'Firebase'//FirebaseAnalytics.h 未找到

core-data - NSPredicate 返回所有对象而不仅仅是 1

c - 如何在 C 中返回匿名结构?

无法访问结构内的枚举