gpt4 book ai didi

ios - 在 AnyCancellable 上调用 .cancel() 与制作 AnyCancellable 之间有区别吗? = 在 SwiftUI 中为零?

转载 作者:行者123 更新时间:2023-12-01 15:40:57 54 4
gpt4 key购买 nike

我在玩 Combine,我意识到不是在 AnyCancellable 上调用 .cancel(),而是让 AnyCancellable 成为 Optional 并将其设置为 nil 也会停止值流。

AnyCancellable? 设置为 nil 而不是在 AnyCancellable 上调用 .cancel() 是错误的事物?它是否有任何负面后果,例如内存泄漏或其他什么?

供引用,这是代码:

class Test: ObservableObject {
var canceller: AnyCancellable?

func start() {
let timerPublisher = Timer
.publish(every: 1, on: .main, in: .common)
.autoconnect()

self.canceller = timerPublisher.sink { date in
print("the date is \(date)")
}
}
func stop1() {
canceller?.cancel()
}
func stop2() {
canceller = nil
}
}
struct ContentView: View {
@ObservedObject var test = Test()

var body: some View {
VStack(spacing: 20) {
Button("Start") {
self.test.start()
}

Button("Stop1") {
self.test.stop1() // Both buttons stop the stream of values
}

Button("Stop2") {
self.test.stop2() // Is there any difference between using this and stop1?
}
}
}
}

最佳答案

从取消的角度看没有区别

来自 Apple 的 documentation :

An AnyCancellable instance automatically calls cancel() when deinitialized.

关于ios - 在 AnyCancellable 上调用 .cancel() 与制作 AnyCancellable 之间有区别吗? = 在 SwiftUI 中为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63039749/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com