diff options
| author | Bug Magnet <marco.nikic@mullvad.net> | 2023-08-31 11:20:13 +0200 |
|---|---|---|
| committer | Bug Magnet <marco.nikic@mullvad.net> | 2023-09-04 11:24:49 +0200 |
| commit | 52c06cb87f4135320a2d8ee54b346ae53d77c01e (patch) | |
| tree | 32f6c26d1c57ce51da01b23d9442101a931baa35 /ios/Operations | |
| parent | 9cc7c2e9b5624f2f8b853e825cd28f92bce77d7d (diff) | |
| download | mullvadvpn-52c06cb87f4135320a2d8ee54b346ae53d77c01e.tar.xz mullvadvpn-52c06cb87f4135320a2d8ee54b346ae53d77c01e.zip | |
Use the block based KVO API in AsyncOperation
Diffstat (limited to 'ios/Operations')
| -rw-r--r-- | ios/Operations/AsyncOperation.swift | 36 |
1 files changed, 7 insertions, 29 deletions
diff --git a/ios/Operations/AsyncOperation.swift b/ios/Operations/AsyncOperation.swift index 7ae6eea6d2..ea8edb24c4 100644 --- a/ios/Operations/AsyncOperation.swift +++ b/ios/Operations/AsyncOperation.swift @@ -117,7 +117,7 @@ open class AsyncOperation: Operation { _error } - override public final var isReady: Bool { + dynamic override public final var isReady: Bool { stateLock.lock() defer { stateLock.unlock() } @@ -238,45 +238,23 @@ open class AsyncOperation: Operation { public let dispatchQueue: DispatchQueue + private var isReadyObserver: NSKeyValueObservation? public init(dispatchQueue: DispatchQueue? = nil) { self.dispatchQueue = dispatchQueue ?? DispatchQueue(label: "AsyncOperation.dispatchQueue") super.init() - addObserver( - self, - forKeyPath: #keyPath(isReady), - options: [], - context: &Self.observerContext - ) + isReadyObserver = observe(\.isReady, options: []) { operation, _ in + operation.checkReadiness() + } } deinit { - removeObserver(self, forKeyPath: #keyPath(isReady), context: &Self.observerContext) + // Clear the observer when the operation is deallocated to avoid leaking memory. + isReadyObserver = nil } // MARK: - KVO - private static var observerContext = 0 - - override public func observeValue( - forKeyPath keyPath: String?, - of object: Any?, - change: [NSKeyValueChangeKey: Any]?, - context: UnsafeMutableRawPointer? - ) { - if context == &Self.observerContext { - checkReadiness() - return - } - - super.observeValue( - forKeyPath: keyPath, - of: object, - change: change, - context: context - ) - } - @objc class func keyPathsForValuesAffectingIsReady() -> Set<String> { [#keyPath(state)] } |
