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

Ale*_*lov 9 struct memory-leaks ios automatic-ref-counting swift

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

例如,

struct Vehicle { ... }
var v: Vehicle? = Vehicle()
v = nil
Run Code Online (Sandbox Code Playgroud)

Muh*_*Ali 14

结构在超出范围时被释放。您不能将 deinit 放在结构中,但这里有一个解决方法。您可以创建一个引用类的结构,该类在释放时会打印一些内容。

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

struct SomeStruct {
    let printer = DeallocPrinter()
}  
Run Code Online (Sandbox Code Playgroud)

因此,当结构被释放时——如果你还没有复制结构,它会在它被释放时打印释放,因为 DeallocPrinter 将在结构被释放的同时被释放。


小智 6

一种简单的方法是使用虚拟类。只需创建一个空类并在那里实现 deinit() 即可。然后在你的结构中使用这个类作为成员,pe

let dummyClass = DummyClass()
Run Code Online (Sandbox Code Playgroud)

一旦结构被释放,类的 deinit() 函数就会被调用。如果没有,那么就会出现内存泄漏。