Fix intermittent crash
If a status in a conversation view controller creates a work item to update the timestamp in 1 minute, but the view controller is deinit'd before that time elapses, the mastodonController instance will be nil, resulting in a crash. The DispatchWorkItems's are cancelled by the respective cell deinit methods. But if the work item has already begun, cancelling it has no effect, potentially leading to a crash in the conditions described above are true. Using a weak reference to self fixes this. Additionally, don't unnecessarily recreate the work items every time. They don't capture any local variables, only self, so nothing changes.
This commit is contained in:
parent
d4ca39761e
commit
244659c262
|
@ -115,8 +115,10 @@ class ActionNotificationGroupTableViewCell: UITableViewCell {
|
|||
delay = nil
|
||||
}
|
||||
if let delay = delay {
|
||||
updateTimestampWorkItem = DispatchWorkItem { [unowned self] in
|
||||
self.updateTimestamp()
|
||||
if updateTimestampWorkItem == nil {
|
||||
updateTimestampWorkItem = DispatchWorkItem { [weak self] in
|
||||
self?.updateTimestamp()
|
||||
}
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: updateTimestampWorkItem!)
|
||||
} else {
|
||||
|
|
|
@ -104,8 +104,10 @@ class FollowNotificationGroupTableViewCell: UITableViewCell {
|
|||
delay = nil
|
||||
}
|
||||
if let delay = delay {
|
||||
updateTimestampWorkItem = DispatchWorkItem { [unowned self] in
|
||||
self.updateTimestamp()
|
||||
if updateTimestampWorkItem == nil {
|
||||
updateTimestampWorkItem = DispatchWorkItem { [weak self] in
|
||||
self?.updateTimestamp()
|
||||
}
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: updateTimestampWorkItem!)
|
||||
} else {
|
||||
|
|
|
@ -78,8 +78,10 @@ class FollowRequestNotificationTableViewCell: UITableViewCell {
|
|||
delay = nil
|
||||
}
|
||||
if let delay = delay {
|
||||
updateTimestampWorkItem = DispatchWorkItem { [unowned self] in
|
||||
self.updateTimestamp()
|
||||
if updateTimestampWorkItem == nil {
|
||||
updateTimestampWorkItem = DispatchWorkItem { [weak self] in
|
||||
self?.updateTimestamp()
|
||||
}
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: updateTimestampWorkItem!)
|
||||
} else {
|
||||
|
|
|
@ -110,8 +110,10 @@ class TimelineStatusTableViewCell: BaseStatusTableViewCell {
|
|||
delay = nil
|
||||
}
|
||||
if let delay = delay {
|
||||
updateTimestampWorkItem = DispatchWorkItem { [unowned self] in
|
||||
self.updateTimestamp()
|
||||
if updateTimestampWorkItem == nil {
|
||||
updateTimestampWorkItem = DispatchWorkItem { [weak self] in
|
||||
self?.updateTimestamp()
|
||||
}
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: updateTimestampWorkItem!)
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue