#selector(userAvatarLoaded), name: .userAvatarLoaded, object: nil)
Результат: не освобождённые 50 мб оперативки, dealloc не вызывается
Сценарий 2:
NotificationCenter.default.addObserver(forName: .userAvatarLoaded, object: nil, queue: .main) { [unowned self] _ in
userAvatarLoaded()
}
Результат: оперативная память освобождается - 1-2 мб, приложение падает после вызова уже запущенным асинхронным потоком
Сценарий 3:
NotificationCenter.default.addObserver(forName: .userAvatarLoaded, object: nil, queue: .main) { [weak self] _ in
self?.userAvatarLoaded()
}
Результат: оперативка освобождается +- 70-80%, использование процессора поднимается до 100%
Связанный с закрытием сцены код:
deinit {
NotificationCenter.default.removeObserver(self)
}
override func viewDidDisappear(_ animated: Bool) {
NotificationCenter.default.removeObserver(self)
super.viewDidDisappear(animated)
}
Без нотифок все деаллокается?
Обсуждают сегодня