【发布时间】:2021-05-03 09:21:24
【问题描述】:
以下代码不适用于 EXC_BAD_ACCESS 错误。
func publisherLoopExample() {
let publisher = PassthroughSubject<String, Never>()
let subscriber = publisher.sink { [weak publisher] received in
guard let publisher = publisher else { return }
publisher.send(received)
print("received \(received)")
}
publisher.send("1")
}
问题:
- 为什么会引发 EXC_BAD_ACCESS?
- 是否担心订阅者会将数据发送给原始发布者,从而导致循环?
【问题讨论】:
-
这里的一切都是同步发生的。
send调用sink,后者调用send,后者又调用sink,依此类推……您创建了一个紧密循环。 -
您遇到了这个站点被命名的问题:堆栈溢出。