blob: 5f92d3bf86e805459734e03237dfaeb9f8f5f331 [file] [log] [blame]
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#include "observer.h"
#import <objc/runtime.h>
#if !__has_feature(objc_arc)
#error "This file must be compiled with ARC enabled"
#endif
@implementation DOBJCObservation {
id _object;
id<Observer> _observer;
NSString* _keyPath;
void* _context;
}
- (instancetype)initForKeyPath:(NSString*)keyPath
ofObject:(id)object
withObserver:(id<Observer>)observer
options:(NSKeyValueObservingOptions) options
context:(void *)context {
_object = object;
_observer = observer;
_keyPath = keyPath;
_context = context;
[object addObserver: observer
forKeyPath: keyPath
options: options
context: context];
return self;
}
- (void)remove {
@synchronized(self) {
[_object removeObserver:_observer forKeyPath:_keyPath context:_context];
_object = nil;
_observer = nil;
_keyPath = nil;
}
}
- (void)dealloc {
[self remove];
}
- (void*)debugObserver { return (__bridge void*)_observer; }
@end