我刚刚浏览了deinitializers的Swift文档,发现它们只存在于类中。所以我只是想知道为什么Swift中的结构不具有去初始化器?
答案 0 :(得分:6)
deinit
适用于引用类型(请参阅https://stackoverflow.com/a/27366050/341994,了解这意味着什么),其中指向的对象独立存在,直到引用计数降至零。
struct是值类型,不需要需要deinit
的内存管理。结构不像类那样独立持久。仅仅设置结构的属性会破坏它并替换它。分配结构会复制它。以高度轻量级的方式创建和销毁结构。他们不需要发出破坏信号;它们太轻了。
答案 1 :(得分:3)
当结构超出范围时,它们会被释放。您不能在结构中放置deinit
,但这是一种解决方法。您可以创建一个结构,该结构具有对在解除分配时打印内容的类的引用。
class DeallocPrinter {
deinit {
print("deallocated")
}
}
struct SomeStruct {
let printer = DeallocPrinter()
}
所以当结构被解除分配时 - 如果你还没有制作结构的副本,那么当它被解除分配时它会打印解除分配,因为 DeallocPrinter 将在取消分配结构的同时取消分配 此外,结构体在类的意义上并不具有实例(即它们没有标识),并且也没有对结构体的“引用”。