53 lines
1.4 KiB
Objective-C
53 lines
1.4 KiB
Objective-C
//
|
|
// _RXKVOObserver.m
|
|
// RxCocoa
|
|
//
|
|
// Created by Krunoslav Zaher on 7/11/15.
|
|
// Copyright © 2015 Krunoslav Zaher. All rights reserved.
|
|
//
|
|
|
|
#import "_RXKVOObserver.h"
|
|
|
|
@interface _RXKVOObserver ()
|
|
|
|
@property (nonatomic, unsafe_unretained) id target;
|
|
@property (nonatomic, strong ) id retainedTarget;
|
|
@property (nonatomic, copy ) NSString *keyPath;
|
|
@property (nonatomic, copy ) KVOCallback callback;
|
|
|
|
@end
|
|
|
|
@implementation _RXKVOObserver
|
|
|
|
-(instancetype)initWithTarget:(id)target
|
|
retainTarget:(BOOL)retainTarget
|
|
keyPath:(NSString*)keyPath
|
|
options:(NSKeyValueObservingOptions)options
|
|
callback:(void (^)(id))callback {
|
|
self = [super init];
|
|
if (!self) return nil;
|
|
|
|
self.target = target;
|
|
if (retainTarget) {
|
|
self.retainedTarget = target;
|
|
}
|
|
self.keyPath = keyPath;
|
|
self.callback = callback;
|
|
|
|
[self.target addObserver:self forKeyPath:self.keyPath options:options context:nil];
|
|
|
|
return self;
|
|
}
|
|
|
|
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
|
|
self.callback(change[NSKeyValueChangeNewKey]);
|
|
}
|
|
|
|
-(void)dispose {
|
|
[self.target removeObserver:self forKeyPath:self.keyPath context:nil];
|
|
self.target = nil;
|
|
self.retainedTarget = nil;
|
|
}
|
|
|
|
@end
|