RxSwift/RxCocoa/Common/Observables/Implementations/KVOObserver.swift

46 lines
1.1 KiB
Swift

//
// KVOObserver.swift
// RxCocoa
//
// Created by Krunoslav Zaher on 7/12/15.
// Copyright © 2015 Krunoslav Zaher. All rights reserved.
//
import Foundation
#if !RX_NO_MODULE
import RxSwift
#endif
protocol KVOObservableProtocol {
var target: AnyObject { get }
var keyPath: String { get }
var retainTarget: Bool { get }
var options: NSKeyValueObservingOptions { get }
}
class KVOObserver : _RXKVOObserver
, Disposable {
typealias Callback = (AnyObject?) -> Void
var retainSelf: KVOObserver? = nil
init(parent: KVOObservableProtocol, callback: Callback) {
#if TRACE_RESOURCES
OSAtomicIncrement32(&resourceCount)
#endif
super.init(target: parent.target, retainTarget: parent.retainTarget, keyPath: parent.keyPath, options: parent.options, callback: callback)
self.retainSelf = self
}
override func dispose() {
super.dispose()
self.retainSelf = nil
}
deinit {
#if TRACE_RESOURCES
OSAtomicDecrement32(&resourceCount)
#endif
}
}