Skip to content

Commit fa748b4

Browse files
committed
Fix a retain cycle in render operation closure
1 parent 81e8d03 commit fa748b4

2 files changed

Lines changed: 14 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ All notable changes to this project will be documented in this file.
1313
- Added by [William Entriken](https://github.com/fulldecent) in Regards to Issue
1414
[#76](https://github.com/fulldecent/FDWaveformView/issues/86).
1515

16+
#### Fixed
17+
- Fixed a retain cycle in completion handler of waveform render operation
18+
- Added by [Philippe Jayet](https://github.com/pjay)
19+
1620
---
1721

1822
## [2.2.0](https://github.com/fulldecent/FDWaveformView/releases/tag/2.2.0)

Source/FDWaveformView.swift

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -416,15 +416,17 @@ open class FDWaveformView: UIView {
416416
let imageSize = CGSize(width: widthInPixels, height: heightInPixels)
417417
let renderFormat = FDWaveformRenderFormat(type: waveformRenderType, wavesColor: .black, scale: desiredImageScale)
418418

419-
let waveformRenderOperation = FDWaveformRenderOperation(audioContext: audioContext, imageSize: imageSize, sampleRange: renderSamples, format: renderFormat) { image in
419+
let waveformRenderOperation = FDWaveformRenderOperation(audioContext: audioContext, imageSize: imageSize, sampleRange: renderSamples, format: renderFormat) { [weak self] image in
420420
DispatchQueue.main.async {
421-
self.renderForCurrentAssetFailed = (image == nil)
422-
self.waveformImage = image
423-
self.renderingInProgress = false
424-
self.cachedWaveformRenderOperation = self.inProgressWaveformRenderOperation
425-
self.inProgressWaveformRenderOperation = nil
426-
self.setNeedsLayout()
427-
self.delegate?.waveformViewDidRender?(self)
421+
guard let strongSelf = self else { return }
422+
423+
strongSelf.renderForCurrentAssetFailed = (image == nil)
424+
strongSelf.waveformImage = image
425+
strongSelf.renderingInProgress = false
426+
strongSelf.cachedWaveformRenderOperation = self?.inProgressWaveformRenderOperation
427+
strongSelf.inProgressWaveformRenderOperation = nil
428+
strongSelf.setNeedsLayout()
429+
strongSelf.delegate?.waveformViewDidRender?(strongSelf)
428430
}
429431
}
430432
self.inProgressWaveformRenderOperation = waveformRenderOperation

0 commit comments

Comments
 (0)