gpt4 book ai didi

ios - init coder aDecoder到底是什么?

转载 作者:IT王子 更新时间:2023-10-29 04:56:42 24 4
gpt4 key购买 nike

我正在通过在线类(class)学习 iOS 开发,每次我制作自定义 View (自定义表格 View 单元格、 Collection View 单元格等)时,讲师总是实现此初始化程序:

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}

为什么我总是必须调用它?它有什么作用?我可以将属性放入 init 中吗?

最佳答案

我将从相反的方向开始这个回答:如果您想将 View 状态保存到磁盘怎么办?这称为序列化。反过来是反序列化 - 从磁盘恢复对象的状态。

NSCoding 协议(protocol)定义了两种序列化和反序列化对象的方法:

encodeWithCoder(_ aCoder: NSCoder) {
// Serialize your object here
}

init(coder aDecoder: NSCoder) {
// Deserialize your object here
}

那么为什么在您的自定义类中需要它呢?答案是界面生成器。当您将一个对象拖到 Storyboard上并对其进行配置时,Interface Builder 将该对象的状态序列化到磁盘上,然后在 Storyboard出现在屏幕上时将其反序列化。您需要告诉 Interface Builder 如何执行这些操作。至少,如果您不向子类添加任何新属性,您可以简单地要求父类(super class)为您进行打包和解包,因此 super.init(coder: aDecoder)称呼。如果你的子类比较复杂,你需要为子类添加自己的序列化和反序列化代码。

这与 Visual Studio 的方法形成对比,后者是将代码写入隐藏文件以在运行时生成对象。

关于ios - init coder aDecoder到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38386339/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com