Skip to content

Instantly share code, notes, and snippets.

@TaLinh
Created June 13, 2022 08:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TaLinh/4af7d28cb4581711c80805a4b36697a5 to your computer and use it in GitHub Desktop.
Save TaLinh/4af7d28cb4581711c80805a4b36697a5 to your computer and use it in GitHub Desktop.
final class DeinitObserver {
private let key: String
private weak var target: AnyObject?
private let deinitHandler: () -> Void
deinit {
deinitHandler()
}
init(for target: AnyObject, deinitHandler: @escaping () -> Void) {
self.target = target
self.key = UUID().uuidString
self.deinitHandler = deinitHandler
objc_setAssociatedObject(target, key, self, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
func cancel() {
guard let target = target else { return }
objc_setAssociatedObject(target, key, nil, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment