     }
 
     private var originalContentOffsetY: CGFloat = 0
+
+    private var observingContentOffsetToken: NSKeyValueObservation?
+    private var observingContentSizeToken: NSKeyValueObservation?
 
     open private(set) var state: PullState = .done {
         didSet {


import UIKit

private var TorchContentOffsetKVOContext = 0
private var TorchContentSizeKVOContext = 1
private let TorchContentOffsetKey = "contentOffset"
private let TorchContentSizetKey = "contentSize"

open class PullObserver: NSObject {
    let option: PullOption
    weak var refreshView: RefreshView!

    }

    deinit {
        observingContentSizeToken?.invalidate()
        observingContentOffsetToken?.invalidate()
    }

    func stopObserving() {
        observingContentSizeToken?.invalidate()
        observingContentOffsetToken?.invalidate()
    }

    func startObserving() {
