在swift 类类型中有方法deinit()
,我们可以在其中定义将从内存中删除类的实例。我们如何知道 struct 它将从内存中删除?
例如,
struct Vehicle { ... }
var v: Vehicle? = Vehicle()
v = nil
答案 0 :(得分:4)
结构超出范围时,它们将被释放。您不能将deinit放入结构中,但这是一种解决方法。您可以创建一个引用到一个类的结构,该类在释放时会打印一些东西。
class DeallocPrinter {
deinit {
print("deallocated")
}
}
struct SomeStruct {
let printer = DeallocPrinter()
}
因此,在释放该结构时-如果尚未复制该结构的副本,则在释放该结构时,它将打印出已释放的结构,因为DeallocPrinter将在该结构被释放的同时被释放。
答案 1 :(得分:1)
一种简单的方法是使用伪类。只需创建一个空类并在那里实现deinit()。然后在您的结构体中将此类用作成员,即
let dummyClass = DummyClass()
释放结构后,将调用该类的deinit()函数。如果没有,那么您就会发生内存泄漏。