emailconfirmed, nsInternRO, nsInternRW, Administrators
3,356
edits
m (→Accessors) |
(added KVO) |
||
(2 intermediate revisions by the same user not shown) | |||
Line 65: | Line 65: | ||
Vorteile von Key-Value-Coding | == Vorteile von Key-Value-Coding == | ||
* Keine benannten Selektoren (nur valueForKey: und setValue:forKey:) | * Keine benannten Selektoren (nur valueForKey: und setValue:forKey:) | ||
* Sämtliche Cocoa-Collections (NSArray, NSDictionary...) benutzen KVC | * Sämtliche Cocoa-Collections (NSArray, NSDictionary...) benutzen KVC | ||
Line 71: | Line 71: | ||
* Ideal für dynamisch synthetisierte Methoden | * Ideal für dynamisch synthetisierte Methoden | ||
== Key-Value-Observing == | |||
KVO (Key-Value-Observing) ist ein sehr schlaues Konzept zur Beobachtung von geänderten Properties. Das Funktionsprinzip ist einfach: | |||
* Registrieren, um Benachrichtigungen bei Änderungen von Properties zu erhalten | |||
* Methode überschreiben, die den Empfang von Nachrichten bei Änderungen erlaubt | |||
* Registrierung entfernen, wenn keine Beobachtung mehr erwünscht ist | |||
<source lang="ObjC"> | |||
// register for KVO (eg. in -viewDidLoad:) | |||
[model addObserver:self | |||
forKeyPath:@"propertyName" | |||
options:NSKeyValueObservingOptionNew | |||
context:NULL]; | |||
// implement this method to receive notifications | |||
-(void)observeValueForKeyPath:(NSString *)keyPath | |||
ofObject:(id)object | |||
change:(NSDictionary *)change | |||
context:(void *)context | |||
{ | |||
NSLog(@"Property changed: %@", object); | |||
} | |||
// remove observer when done (eg. in -dealloc) | |||
[model removeObserver:self forKeyPath:@"propertyName"]; | |||
</source> | |||
== Vorteile von Key-Value-Observing == | |||
* Keine Referenz vom Model zum Controller: Der Controller kann Änderungen im Model registrieren, ohne dass das Model eine explizite Referenz zum Controller halten muss | |||
* Vermeiden von unerwünschten Schleifen beim Aktualisieren von Werten | |||
== Links == | == Links == |