【发布时间】:2020-08-07 19:10:45
【问题描述】:
我很难与Combine 打交道。发布者完成后,我想更新一个值,但每当我更新该值时,内存就会被分配并且永远不会消失。
每当我尝试分配图像时,都会出现泄漏。如果我不指定不泄漏。
编辑:此处可重现的示例:https://github.com/peterwarbo/MemoryAllocation
这是我的代码的样子:
final class CameraController: ObservableObject {
private var storage = Set<AnyCancellable>()
var image: UIImage?
func capture(_ image: UIImage) {
PhotoLibrary.saveImageToTemporaryDirectory(image) // AnyPublisher<URL, Error>
.zip(PhotoLibrary.saveImage(image, location: self.locationObserver.location) // AnyPublisher<UIImage, Error>)
.sink(receiveCompletion: { [weak self] (completion) in
switch completion {
case let .failure(error):
Log.error(error)
self?.handleCaptureError(error)
case .finished: break
}
}) { [weak self] (value) in
print(value.1) // no leak
self.image = value.1 // leak
}
.store(in: &self.storage)
}
}
我也尝试过使用sink:
.receive(
subscriber: Subscribers.Sink(
receiveCompletion: { [weak self] completion in
switch completion {
case let .failure(error):
Log.error(error)
self?.handleCaptureError(error)
case .finished: break
}
},
receiveValue: { value in
print(value.1) // no leak
self.image = value.1 // leak
}
)
)
【问题讨论】:
标签: swift memory-leaks combine