Avatar
omochimetaru 1/21/2020 1:40 PM
class ViewController { class Task { var param: Int = 3 func run() { print(param) } } let pq = DispatchQueue(label: "pq") var task: Task? func viewDidLoad() { let task = Task() self.task = task pq.startBindingLoop(task) { $0.run() } } func viewWillDisappear() { task = nil // stop task } }
1:40 PM
↑こんな風に止めたりできて便利かもしれませんね
1:43 PM
ただまあ、元のコードにしても、 ViewControllerがnilになった後も、 「BG処理の次のループが開始しない」 だけであって、 nilになった瞬間に開始していた周回の処理が割り込まれて止まるわけではないので、 「ViewControllerはnilだけどBG処理が実行されている」 時間帯が発生しうるので、その状況でエンバグしない考慮は必要ですね。
1:44 PM
「BG処理の実行中はVCがdeinitされていない」事は保証されてるけど。