0
A
回答
1
僅供參考,並不必要,Signal
將被佈置和停止轉發事件。
Signal
是一個類型,如果沒有人有對它的引用,應當DEINIT。 然而,Signal
實現引入了一個棘手的辦法留住自己,看到state
財產,因此有暫時存在一些內存泄漏。從源代碼可以看出,如果有一些觀察者在Signal
上訂閱,它的確依次保留它,直到所有觀察者退訂或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
類型,你不應該考慮它的使用壽命。
相關問題
- 1. 如何將信號和SignalProducer合併到ReactiveSwift的信號中?
- 2. 保留或不保留
- 3. combineLatest行爲中的差異信號v SignalProducer(ReactiveCocoa 4)
- 4. 保留TabBarController信息
- 5. 保留對星號
- 6. ReactiveCocoa:與Signal或SignalProducer綁定的區別?
- 7. Django保留註冊信息
- 8. SignalProducer的狀態
- 9. Reactivecocoa 4 SignalProducer
- 10. 保留卷序列號
- 11. MySQL-Masking信用卡號碼,但保留連字符
- 12. 解析XML文件並保留有關行號的信息
- 13. 信號/插槽傳輸後無法保留數據
- 14. EXC_BAD_ACCESS複製或保留塊
- 15. 留下二進制信號量鎖定
- 16. Laravel作業和保留狀態或保留隊列
- 17. 保持恆定信號
- 18. Django預保存信號
- 19. 在回發後保留PreviousPage信息
- 20. 使用OAuth時保留登錄信息
- 21. 保留可可中的信息?
- 22. Django從頁面導航,保留信息
- 23. 有狀態EJB不保留信息
- 24. 保留文件信息,而在PHP
- 25. Wt ::信號或綁定?
- 26. Java:使用URLDecoder,但保留加號(+)
- 27. 回聲但保留雙引號
- 28. 保留括號內的文字只有
- 29. sed替換並保留雙引號
- 30. JSON中發送的保留撇號