Подтверждено какое-то странное поведение.
Сначала я ставлю точку останова на закрытие наблюдателя успеха, перед тем как наблюдатели удаляются, и печатаю адрес памяти токенов и NotificationCenter.default
. Печать NotificationCenter.default
показывает зарегистрированных наблюдателей.
Я не буду публиковать здесь журнал, так как список очень длинный.
Кстати, self
был слабо захвачен в замыканиях.
Printing description of successToken:
▿ Optional<NSObject>
- some : <__NSObserver: 0x60000384e940>
Printing description of failureToken:
▿ Optional<NSObject>
- some : <__NSObserver: 0x60000384ea30>
Также подтвердили, что наблюдатели были (предположительно) удалены, напечатав NotificationCenter.default
снова после вызова removeObserver(_:)
.
Затем я покинул контроллер представления и подтвердил, что self
в коде кавычек был освобожден.
Наконец, я включил график отладочной памяти, искал адреса памяти и нашел это:
В конце концов, не было цикла сохранения. Просто наблюдатели не были удалены, и поскольку затворы были живы, захваченный self
был жив за пределами своего жизненного цикла.
Пожалуйста, прокомментируйте, если вы, ребята, думаете, что это ошибка. Согласно документации на NotificationCenter
, скорее всего, это ...