如何在Swift中知道从内存中删除结构?

时间:2017-10-20 04:52:31

标签: ios swift struct memory-leaks automatic-ref-counting

在swift 类型中有方法deinit(),我们可以在其中定义将从内存中删除类的实例。我们如何知道 struct 它将从内存中删除?

例如,

struct Vehicle { ... }
var v: Vehicle? = Vehicle()
v = nil

2 个答案:

答案 0 :(得分:4)

结构超出范围时,它们将被释放。您不能将deinit放入结构中,但这是一种解决方法。您可以创建一个引用到一个类的结构,该类在释放时会打印一些东西。

class DeallocPrinter {
    deinit {
        print("deallocated")
    }
}

struct SomeStruct {
    let printer = DeallocPrinter()
}  

因此,在释放该结构时-如果尚未复制该结构的副本,则在释放该结构时,它将打印出已释放的结构,因为DeallocPrinter将在该结构被释放的同时被释放。

答案 1 :(得分:1)

一种简单的方法是使用伪类。只需创建一个空类并在那里实现deinit()。然后在您的结构体中将此类用作成员,即

let dummyClass = DummyClass()

释放结构后,将调用该类的deinit()函数。如果没有,那么您就会发生内存泄漏。