我不明白在合并闭包中使用self
的正确方法
class ViewModel {
var requestPublisher = PassthroughSubject<Void, Never>()
var nextPageAvailabe = true
private var subscriptions = Set<AnyCancellable>()
init() {
setupSubscriptions()
}
setupSubscriptions() {
requestPublisher
.filter { _ in self.nextPageAvailabe }
.sink(receiveValue: {
print("Received request")
}).store(in: &subscriptions)
}
}
requestPublisher.send()
从父类执行。使用.filter { _ in self.nextPageAvailabe }
会导致内存泄漏。所以我需要在filter {}
中使用[weak self]
或[unowned self]
。这两种方法都解决了内存泄漏问题,但我不明白正确的方法。我读了几篇文章,但没有找到答案。那么在合并闭包中使用self
的正确方法是什么呢?
1条答案
按热度按时间r55awzrz1#
weak
绝对是正确的选择:你将只有一个可选的self
。当weak
变量被释放时,它将变成nil。unowned
应该尽可能避免,因为它不是执行阶段安全的:它就像weak
,但结果不是可选的。所以如果你试图在一个无主变量被释放后使用它,应用程序只会崩溃。