参考另一个模型的模型 - 使用 NSCoding 保存

Models with refference to another models - saving using NSCoding

我正在创建某种游戏跟踪器,想问问这种设计是否是个糟糕的选择。

我使用的是 MVC 架构,在我的模型中我有对其他模型的引用,即在 Player 模型中我有

var name: String
var lastTimePlayed: Date?
var timesPlayed: Int
let playerID: String
var gamesPlayed = [Game]()
var matchesPlayed = [Game: [Match]]()
var gamesPlace = [Game: [Int]]()
var gamesPoints = [Game: [Int]]()

这是它的外观图片:

Graph of all models used.

箭头表示该模型保留对另一个模型的引用。

只保存 gameID 和 matchID 或 gameName 而不是引用 Game 和 Match 模型会更好吗?保留直接引用对我来说更容易,所以我可以访问上次比赛的日期等。但我也可以用其他方式来做。

当然,当我删除模型时,我会处理所有这些引用并将它们也删除,因此不会发生内存泄漏。

我的第二个问题是 - 当我尝试使用 NSCoding(在商店使用 NSKeyedArchiver.archiveRootObject)保存那些时,我会遇到问题吗?它不会进入类似循环的循环,从 Player 到 Game 到 Match,然后再到 Player 吗?

感谢您的帮助!

NSCoder 子类知道如何避免循环引用,参见 https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Archiving/Articles/archives.html

也就是说,您可能应该考虑将 weak 引用引入您的数据模型以避免保留循环。