Skip to content

Commit 45fb22d

Browse files
authored
Merge pull request #99 from pjay/fix-retain-cycle
Fix a retain cycle in render operation closure
2 parents b8acd6a + 025628e commit 45fb22d

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ All notable changes to this project will be documented in this file.
1414
[#76](https://github.com/fulldecent/FDWaveformView/issues/86).
1515

1616
#### Fixed
17+
- Fixed a retain cycle in completion handler of waveform render operation
18+
- Added by [Philippe Jayet](https://github.com/pjay)
1719
- Cancel waveform render operation when view is released
1820
- Added by [Philippe Jayet](https://github.com/pjay)
1921

Source/FDWaveformView.swift

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

423-
let waveformRenderOperation = FDWaveformRenderOperation(audioContext: audioContext, imageSize: imageSize, sampleRange: renderSamples, format: renderFormat) { image in
423+
let waveformRenderOperation = FDWaveformRenderOperation(audioContext: audioContext, imageSize: imageSize, sampleRange: renderSamples, format: renderFormat) { [weak self] image in
424424
DispatchQueue.main.async {
425-
self.renderForCurrentAssetFailed = (image == nil)
426-
self.waveformImage = image
427-
self.renderingInProgress = false
428-
self.cachedWaveformRenderOperation = self.inProgressWaveformRenderOperation
429-
self.inProgressWaveformRenderOperation = nil
430-
self.setNeedsLayout()
431-
self.delegate?.waveformViewDidRender?(self)
425+
guard let strongSelf = self else { return }
426+
427+
strongSelf.renderForCurrentAssetFailed = (image == nil)
428+
strongSelf.waveformImage = image
429+
strongSelf.renderingInProgress = false
430+
strongSelf.cachedWaveformRenderOperation = self?.inProgressWaveformRenderOperation
431+
strongSelf.inProgressWaveformRenderOperation = nil
432+
strongSelf.setNeedsLayout()
433+
strongSelf.delegate?.waveformViewDidRender?(strongSelf)
432434
}
433435
}
434436
self.inProgressWaveformRenderOperation = waveformRenderOperation

0 commit comments

Comments
 (0)