KVO срещу NSNotifications

Има ли някакво предимство да се използва KVO вместо по-"общата" (и според мен по-стабилна) функция на NSNotifications?


person Pierre Watelet    schedule 03.05.2011    source източник
comment
Коя част от KVO намирате за нездрава?   -  person hooleyhoop    schedule 03.05.2011
comment
Недостатъците са добре обсъдени във връзката Cocoa Builder Дадох отговора си. Най-вече проблемите произтичат от факта, че трябва да обработвате всички KVO известия в една функция, което е крехко при подкласиране.   -  person zoul    schedule 03.05.2011
comment
Добре, трябва да не се съглася с това. KVO не е крехък при подкласиране - използването на селектор като контекст е хак, а не това, за което служи.   -  person hooleyhoop    schedule 03.05.2011
comment
Какво ще кажете за removeObserver:forKeyPath:, което не приема никакъв контекст? Какво ще стане, ако и моят клас, и неговият подклас искат да наблюдават един и същ път и спрат да наблюдават в различни моменти?   -  person zoul    schedule 05.05.2011
comment
@hooleyhoop Нямам нищо против единичния манипулатор, но следенето дали наблюдавам обект е досадно. Все още използвам KVO, но ако имаше версия на KVO с автоматично броене на препратки (ARC), вероятно щях да я използвам.   -  person ma11hew28    schedule 11.04.2014
comment
Актуализация: В iOS 6 и по-нови версии viewDidUnload вече не се извиква. Така че сега можем да започнем да наблюдаваме в viewDidLoad и да завършим наблюдението в deinit, като знаем, че извикванията към всеки метод са едно към едно.   -  person ma11hew28    schedule 12.11.2014


Отговори (2)


Мразя KVO със страст, главно защото ме принуждава да насочвам всички KVO известия през един манипулатор. Използвам всичко останало, ако имам избор. Но KVO има ясното предимство да бъде достъпен за много от класовете в стандартната библиотека – ако искате да наблюдавате промените в свойствата на някои класове от стандартната библиотека, KVO може да е единствената ви опция. Има една много интересна тема за Cocoa Builder за KVO и различни опции за наблюдение и обвързване.

(Трябва да добавя, че имам недоволства само от KVO като интерфейс за наблюдение на високо ниво. Мисля, че е много добър като водопровод за други технологии, особено за свързване.)

person zoul    schedule 03.05.2011

За да използвате NSNotifications, за да направите нещо подобно на KVO, ще трябва да напишете персонализирани шаблонни методи за достъп за всяко свойство, което искате да наблюдавате.

Това е едновременно много по-малко "генерично" и много по-малко стабилно от използването на KVO.

person hooleyhoop    schedule 03.05.2011