为什么不结构化的Swift类似于Swift中的deinitializers?

时间:2018-05-17 19:17:26

标签: swift

我刚刚浏览了deinitializers的Swift文档,发现它们只存在于类中。所以我只是想知道为什么Swift中的结构不具有去初始化器?

2 个答案:

答案 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 将在取消分配结构的同时取消分配 此外,结构体在类的意义上并不具有实例(即它们没有标识),并且也没有对结构体的“引用”。