gpt4 book ai didi

swift - 保留 Signal 或 SignalProducer?

转载 作者:行者123 更新时间:2023-11-28 16:01:56 24 4
gpt4 key购买 nike

我是否有责任维护对 SignalSignalProducer 的引用,例如,使用实例变量?

换句话说,当它们被释放时,它们会自动消失并停止发送事件吗?

最佳答案

仅供引用,没有必要,Signal 将被处理并停止转发事件。

Signal是一个类类型,如果没有人引用它,它应该是deinit。但是,Signal 实现引入了一种保留自身的技巧,请参阅 state 属性,因此临时存在一些内存泄漏。如源代码所示,如​​果有一些观察者订阅了 Signal,它的 state 会依次保留它,直到所有观察者取消订阅或 Signal > 收到完成/错误/中断事件。

这里是一些标记的代码片段。

// definition of SignalState
private struct SignalState<Value, Error: Swift.Error> {
var observers: Bag<Signal<Value, Error>.Observer> = Bag()
var retainedSignal: Signal<Value, Error>? // here is the key
}

public func observe(_ observer: Observer) -> Disposable? {
var token: RemovalToken?
state.modify {
$0?.retainedSignal = self // retain self when one observer on
token = $0?.observers.insert(observer)
}

if let token = token {
return ActionDisposable { [weak self] in
if let strongSelf = self {
strongSelf.state.modify { state in
state?.observers.remove(using: token)
if state?.observers.isEmpty ?? false {
// break retain cycle when disposed
state!.retainedSignal = nil
}
}
}
}
} else {
observer.sendInterrupted()
return nil
}
}

SignalProducer怎么样?
非常直观,SignalProducer 只是struct 类型,您不应该考虑它的生命周期。

关于swift - 保留 Signal 或 SignalProducer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40897619/

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