参考另一个模型的模型 - 使用 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
引用引入您的数据模型以避免保留循环。
我正在创建某种游戏跟踪器,想问问这种设计是否是个糟糕的选择。
我使用的是 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
引用引入您的数据模型以避免保留循环。