Memory leaks Swift Combine-zip运算符是否保留其没有的所有值';你没有机会发表吗?
下面是我想知道的代码:Memory leaks Swift Combine-zip运算符是否保留其没有的所有值';你没有机会发表吗?,memory-leaks,timer,zip,combine,publisher,Memory Leaks,Timer,Zip,Combine,Publisher,下面是我想知道的代码: final class Foo { var subscriptions = Set<AnyCancellable>() init () { Timer .publish(every: 2, on: .main, in: .default) .autoconnect() .zip(Timer.publish(every: 3, on: .m
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)
}
}
这段代码最终会因为内存不足而崩溃吗?似乎zip操作符正在存储它接收到但尚未发布的所有值。
zip
没有限制其上游缓冲区大小。你可以这样证明:
import Combine
let ticket = (0 ... .max).publisher
.zip(Empty<Int, Never>(completeImmediately: false))
.sink { print($0) }
zip
不限制其上游缓冲区大小。你可以这样证明:
import Combine
let ticket = (0 ... .max).publisher
.zip(Empty<Int, Never>(completeImmediately: false))
.sink { print($0) }
我想说你的假设是正确的-Zip将容纳越来越多的更快计时器的值。当然,它需要很长的时间来积累足够的时间使应用程序崩溃。每隔6秒,它会保存一个额外的日期对象。不确定Date对象有多大,但如果它是,比如说8字节,那么要达到100米,需要大约900天(如果我计算正确的话)我想你的假设是正确的-Zip将容纳越来越多的更快计时器的值。当然,要积累足够的时间来崩溃应用程序需要很长的时间。每隔6秒,它会保存一个额外的日期对象。不确定Date对象有多大,但如果它是,比如说8字节,那么要达到100米,需要大约900天(如果我计算正确的话)
66.07 MB 99.8% 174 main
64.00 MB 96.7% 45 Publisher<>.sink(receiveValue:)
64.00 MB 96.7% 42 Publisher.subscribe<A>(_:)
64.00 MB 96.7% 41 Publishers.Zip.receive<A>(subscriber:)
64.00 MB 96.7% 12 Publisher.subscribe<A>(_:)
64.00 MB 96.7% 2 Empty.receive<A>(subscriber:)
64.00 MB 96.7% 2 AbstractZip.Side.receive(subscription:)
64.00 MB 96.7% 2 AbstractZip.receive(subscription:index:)
64.00 MB 96.7% 2 AbstractZip.resolvePendingDemandAndUnlock()
64.00 MB 96.7% 2 protocol witness for Subscription.request(_:) in conformance Publishers.Sequence<A, B>.Inner<A1, B1, C1>
64.00 MB 96.7% 2 Publishers.Sequence.Inner.request(_:)
64.00 MB 96.7% 1 AbstractZip.Side.receive(_:)
64.00 MB 96.7% 1 AbstractZip.receive(_:index:)
64.00 MB 96.7% 1 specialized Array._copyToNewBuffer(oldCount:)
64.00 MB 96.7% 1 specialized _ArrayBufferProtocol._forceCreateUniqueMutableBufferImpl(countForBuffer:minNewCapacity:requiredCapacity:)
64.00 MB 96.7% 1 swift_allocObject
64.00 MB 96.7% 1 swift_slowAlloc
64.00 MB 96.7% 1 malloc
64.00 MB 96.7% 1 malloc_zone_malloc