我应该使用NSUserDefault或CoreData保存最近的十个分数吗?

时间:2019-01-01 21:33:25

标签: 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文件中吗?

1 个答案:

答案 0 :(得分:0)

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

每次调用密钥时,存储在其中的 entire plist文件都会被调用到内存中。

例如)

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

因此,如果您存储的数组每次用户播放时都会增长,那么最终将出现内存问题。

在上面的示例中,使用UserDefaults存储高分和UserName很好,但是我建议使用CoreData(或其他方式)存储一个包含每次游戏运行数据的数组。