Created
June 13, 2022 08:14
-
-
Save TaLinh/4af7d28cb4581711c80805a4b36697a5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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