KVO funcionará correctamente con ajustadores personalizados para las propiedades; este siempre ha sido el caso para las clases derivadas de NSObject. La maquinaria en tiempo de ejecución busca una invocación del método setter relevante, e invoca implícitamente "willChangeValueForKey" antes de ejecutar el setter, luego llama implícitamente "didChangeValueForKey" después de que el setter finaliza.
Puede deshabilitar este comportamiento automático si desea tener un control más preciso sobre las notificaciones de KVO. Como se mencionó anteriormente, las propiedades de solo lectura cuyo valor cambia modificando el respaldo ivar, o cuyos valores se derivan por cálculo, son lugares donde usaría las notificaciones manuales (aunque hay un mecanismo, keyPathsAffectingValueFor, donde puede indicar al tiempo de ejecución que el el valor de una propiedad depende del cambio de otra propiedad, y enviará la notificación de cambio según corresponda.) Para deshabilitar el comportamiento automático por propiedad, ingrese un método de clase + (BOOL) automáticamente Notifica ObserviosOf y devuelve NO .
A menudo deshabilito las notificaciones automáticas de KVO, porque he encontrado que se genera una notificación KVO al invocar un setter, incluso si el valor de la propiedad se establece en el valor actual (por ejemplo, no hay cambio). Deseo para suprimir la notificación sin sentido por el bien de la eficiencia:
+ (BOOL)automaticallyNotifiesObserversOfMyProperty
{
return NO;
}
- (void)setMyProperty:(NSInteger)myProperty
{
if(_myProperty != myProperty)
{
[self willChangeValueForKey:@"myProperty"];
_myProperty = myProperty;
[self didChangeValueForKey:@"myProperty"];
}
}
Una buena discusión se puede encontrar en la cabecera NSKeyValueObserving.h, que puede desplazarse a por Cmd + clic en el nombre de los métodos "willChangeValueForKey" y "didChangeValueForKey "en XCode.
¡Muchas gracias! – Frost
Me encontré con el mismo problema. Aquí hay un poco más sobre KVO de Apple http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/KeyValueObserving/KeyValueObserving.html#//apple_ref/doc/uid/10000177i – Dan