【发布时间】:2020-12-08 15:55:38
【问题描述】:
这是我想知道的代码:
final class Foo {
var subscriptions = Set<AnyCancellable>()
init () {
Timer
.publish(every: 2, on: .main, in: .default)
.autoconnect()
.zip(Timer.publish(every: 3, on: .main, in: .default).autoconnect())
.sink {
print($0)
}
.store(in: &subscriptions)
}
}
这是它产生的输出:
(2020-12-08 15:45:41 +0000, 2020-12-08 15:45:42 +0000)
(2020-12-08 15:45:43 +0000, 2020-12-08 15:45:45 +0000)
(2020-12-08 15:45:45 +0000, 2020-12-08 15:45:48 +0000)
(2020-12-08 15:45:47 +0000, 2020-12-08 15:45:51 +0000)
这段代码最终会因为内存不足而崩溃吗?似乎 zip 运算符正在存储它收到但尚未发布的每个值。
【问题讨论】:
-
我会说你的假设是正确的 - Zip 将保存越来越多的更快计时器的值。
-
当然,积累到足以让应用崩溃的程度需要很长时间。每 6 秒它持有一个额外的 Date 对象。不确定 Date 对象有多大,但如果是 8 个字节,那么要达到 100M 大约需要 900 天(如果我计算正确的话)
标签: memory-leaks timer zip combine publisher