Почему removeAllObservers () не работает в deinit?

Fattie спросил: 14 ноября 2017 в 05:52 в: ios

Как всем известно, когда используется потрясающая версия Firebase в iOS,

всякий раз, когда у вас есть наблюдения в контроллере представления,

var o: DatabaseReference?
var o2: DatabaseReference?
var o3: DatabaseReference?

важно, чтобы когда этот экран исчезнет, ​​вы должны прекратить все наблюдения ...

private func clearObservations() {    print("\n\n clearing observations! \n\n")    if o != nil {        o?.removeAllObservers()
        o = nil
    }    if o2 != nil {
    etc...
}

Однако!

После значительного тестирования вы не можете вызвать clearObservations() в deinit - вы должны вызывать его в viewDidDisappear (или в другом логическом месте).

Опять же - явно нет работать в deinit.

Мой вопрос, почему на самом деле это не работает в deinit?


Кстати, вы запускаете наблюдатель Firebase следующим образом:

say, viewWillAppear#    o = Database.database().reference(withPath: "string")
    o!.observe(.value, with: { (snapshot) in        self.blah(snapshot)
    })

0 ответов