Есть ли преимущества в использовании KVO вместо более «общей» (и, на мой взгляд, более надежной) функции NSNotification
s?
KVO против NSNotifications
Ответы (2)
Я страстно ненавижу KVO, главным образом потому, что он заставляет меня направлять все уведомления KVO через один обработчик. Я использую все, что есть в наличии, если у меня есть выбор. Но KVO имеет явное преимущество в том, что он доступен для многих классов стандартной библиотеки - если вы хотите наблюдать за изменениями свойств некоторых классов из стандартной библиотеки, KVO может быть вашим единственным вариантом. Есть одна очень интересная ветка на Cocoa Builder о КВО и различных вариантах наблюдения и привязки.
(Я должен добавить, что у меня есть претензии только к KVO как к высокоуровневому интерфейсу наблюдения. Я думаю, что он очень хорош в качестве сантехники для других технологий, особенно привязок.)
Чтобы использовать NSNotifications для чего-то похожего на KVO, вам нужно будет написать собственные стандартные методы доступа для каждого свойства, которое вы хотите наблюдать.
Это гораздо менее «общий» и гораздо менее надежный, чем использование KVO.
removeObserver:forKeyPath:
, который не принимает никакого контекста? Что, если и мой класс, и его подкласс захотят наблюдать один и тот же путь и прекратить наблюдение в разные моменты? - person zoul   schedule 05.05.2011viewDidUnload
больше не вызывается. Итак, теперь мы можем начать наблюдение вviewDidLoad
и закончить наблюдение вdeinit
, зная, что вызовы каждого метода однозначны. - person ma11hew28   schedule 12.11.2014