summaryrefslogtreecommitdiffhomepage
path: root/ios/Operations
diff options
context:
space:
mode:
authorBug Magnet <marco.nikic@mullvad.net>2023-08-31 11:20:13 +0200
committerBug Magnet <marco.nikic@mullvad.net>2023-09-04 11:24:49 +0200
commit52c06cb87f4135320a2d8ee54b346ae53d77c01e (patch)
tree32f6c26d1c57ce51da01b23d9442101a931baa35 /ios/Operations
parent9cc7c2e9b5624f2f8b853e825cd28f92bce77d7d (diff)
downloadmullvadvpn-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.swift36
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)]
}