所以我正在阅读本教程,最后我想出了如何使用NSCoding归档对象,以及使用可用的初始化器再次从文件系统初始化它.
原文链接:https://www.f2er.com/swift/319435.html// To encode the object in the first place func encode(with aCoder: NSCoder) { aCoder.encode(name,forKey: "name") } // To 're-initialize' the object required init?(coder aDecoder: NSCoder) { self.name = aDecoder.decodeObject(forKey: "name") as! String super.init() }
但是,我仍然有点不确定整个过程如何在高水平上运作.请告诉我我的想法不正确.
1)如果你的对象采用NSCoding协议,你可以使用encode(with :)函数让NSCoder对象通过函数传递并执行’encode’方法,传递你的对象的实例属性(它本身就是一个对象) )作为第一个参数,以及表示键作为第二个值的字符串.
2)这是一个递归过程,基本上,你传递对象的实例属性(即名称)的原因是为了使THAT属性(它是一个对象)可以发送编码消息,依此类推等等.直到它不再到达NSCoding采用者.
3)aDecoder对象也可以对事物进行解码,因此在初始化自定义对象时,您将需要使用可用的初始化程序来解码为您使用的模糊字符串键设置的任何对象.
这是我真的不明白的……
aDecoder对象如何知道哪个单独的对象用于该组键?例如,假设我有10个狗对象实例.当系统通过一个解码器,我在它上面使用decodeObject方法,然后按键将self.name设置为该解码对象的值时,aDecoder如何知道这条狗的名字被保存为“杰克”,而不是偶然抓住其中一个狗实例的名字,比如“Jodi”?
换句话说,一旦你对对象的属性进行编码,文件系统如何知道将对象实例A的属性与对象实例B的属性分开,这样,当应用程序被引导备份并且对象A被初始化时,它只是抓住对象A的属性?
谢谢