似乎 View 及其成员在演示后不会取消分配:
@main
struct ExampleApp: SwiftUI.App {
@State var show = false
var body: some Scene {
WindowGroup {
VStack {
Button("Present") { show = true }
Text("First")
.fullScreenCover(isPresented: $show) {
CheckSecond { show = false }
}
}
}
}
}
struct CheckSecond: View {
private let log = LogDeinit()
var action: () -> Void
var body: some View {
Text("Second")
Button("Back"){ action() }
}
}
class LogDeinit {
init(name: String) { print("init") }
deinit { print("deinit") }
}
来回显示“CheckSecond”会导致控制台中出现“init”,但不会出现“deinit”。内存映射显示“LogDeinit”对象由单个 SwiftUI 对象引用,无需任何额外连接。在 iOS 16 中可以正常工作 - 每次关闭时都会打印“deinit”。看来真的是漏水了。
有一些关于解决方法的问题。这就是为什么我要回答我自己的问题:
已经是iOS 17.0.3了,问题依然存在。我们还没有找到更好的方法,因为对属性使用可选并将其重置为onDisapear
var reference: Service?
...
.onDisapear {
reference = nil
}
当然,它可以被包装在一些属性包装器中。但主要思想还是一样的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)