Задать вопрос

В чём разница между Key-Value Observing и Notifications?

В чём разница между Key-Value Observing и Notifications? Когда что использовать?
  • Вопрос задан
  • 5039 просмотров
Подписаться 5 Средний Комментировать
Решения вопроса 2
briahas
@briahas
ObjC, Swift, Python
При KVO - обозреватель в курсе об обозреваемом объекте

При Notifications - обозреватель в курсе лишь о названии нотификации, и абсолютно не имеет понятия кто ее отослал.

Что из этого вписывается в твою архитектуру то и используй.

НО! Мое мнение - лучше избегать нотификаций и кво во всех проявлениях кроме тех где они вшиты в систему и без них ни как. Потому что, они добавляют запутанности логике. Нет наглядности в том "кто вызвал эту нотификацию?", "кто изменил эту проперти?"
Ответ написан
Комментировать
tikhonov666
@tikhonov666
iOS, Swift, Objective-C
KVO - позволяет объектам подписаться на изменение конкретных свойств объекта. В swift 4 это выглядит так
class MyObjectToObserve: NSObject {
    @objc dynamic var myDate = NSDate()
    func updateDate() {
        myDate = NSDate()
    }
}

class MyObserver: NSObject {
    @objc var objectToObserve: MyObjectToObserve
    var observation: NSKeyValueObservation?
    
    init(object: MyObjectToObserve) {
        objectToObserve = object
        super.init()
        
        observation = observe(\.objectToObserve.myDate) { object, change in
            print("Observed a change to \(object.objectToObserve).myDate, updated to: \(object.objectToObserve.myDate)")
        }
    }
}
 
let observed = MyObjectToObserve()
let observer = MyObserver(object: observed)
 
observed.updateDate()


Notifications - Определяет зависимость типа «один ко многим» между объектами таким об разом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом. В iOS представлен в виде NotificationCenter.

Исходя из определений используй, то что тебе нужно.
Если например тебе нужно в разных местах обрабатывать разлогин пользователя, то используй Notifications. Если тебе нужно отслеживать изменение имени в профайле, то KVO.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы