ensure repeats true timers are released if self is released

This commit is contained in:
Ehren Kret 2024-04-27 09:35:27 -05:00
parent 98063956b0
commit a82b62ce05
4 changed files with 29 additions and 9 deletions

View File

@ -1534,8 +1534,12 @@ public class ConversationInputToolbar: UIView, LinkPreviewViewDraftDelegate, Quo
)
voiceMemoUpdateTimer?.invalidate()
voiceMemoUpdateTimer = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { [weak self] _ in
self?.updateVoiceMemo()
voiceMemoUpdateTimer = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { [weak self] timer in
guard let self else {
timer.invalidate()
return
}
self.updateVoiceMemo()
}
}

View File

@ -343,8 +343,12 @@ extension ConversationViewController {
markAsReadLogger.info("Starting read timer for \(caller).")
readTimer?.invalidate()
let readTimer = Timer(timeInterval: 0.1, repeats: true) { [weak self] _ in
self?.readTimerDidFire()
let readTimer = Timer(timeInterval: 0.1, repeats: true) { [weak self] timer in
guard let self else {
timer.invalidate()
return
}
self.readTimerDidFire()
}
self.readTimer = readTimer
RunLoop.main.add(readTimer, forMode: .common)
@ -380,8 +384,12 @@ extension ConversationViewController {
func startReloadTimer() {
AssertIsOnMainThread()
let reloadTimer = Timer(timeInterval: 1, repeats: true) { [weak self] _ in
self?.reloadTimerDidFire()
let reloadTimer = Timer(timeInterval: 1, repeats: true) { [weak self] timer in
guard let self else {
timer.invalidate()
return
}
self.reloadTimerDidFire()
}
self.reloadTimer = reloadTimer
RunLoop.main.add(reloadTimer, forMode: .common)

View File

@ -384,8 +384,12 @@ extension LinkedDevicesTableViewController: LinkDeviceViewControllerDelegate {
self.isEditing = false
pollingRefreshTimer?.invalidate()
pollingRefreshTimer = Timer.scheduledTimer(withTimeInterval: 10, repeats: true) { [weak self] _ in
self?.refreshDevices()
pollingRefreshTimer = Timer.scheduledTimer(withTimeInterval: 10, repeats: true) { [weak self] timer in
guard let self else {
timer.invalidate()
return
}
self.refreshDevices()
}
let progressText = OWSLocalizedString("WAITING_TO_COMPLETE_DEVICE_LINK_TEXT",

View File

@ -95,7 +95,11 @@ public class AudioPlayer: NSObject {
audioPlayerPoller?.invalidate()
let audioPlayerPoller = Timer(timeInterval: 0.05, repeats: true) { [weak self] timer in
self?.audioPlayerUpdated(timer: timer)
guard let self else {
timer.invalidate()
return
}
self.audioPlayerUpdated(timer: timer)
}
RunLoop.main.add(audioPlayerPoller, forMode: .common)
self.audioPlayerPoller = audioPlayerPoller