Buscar..


Observaciones

KVC : - Codificación Clave-Valor

Normalmente se accede a las variables de instancia a través de propiedades o accesores, pero KVC ofrece otra forma de acceder a las variables en forma de cadenas. De esta manera, su clase actúa como un diccionario y el nombre de su propiedad, por ejemplo, "age" se convierte en clave y el valor que posee la propiedad se convierte en valor para esa clave.

For example, you have employee class with "age" property. Normally we access like this.
emp.age = @”20″;
NSString age = emp.age; 

But KVC works like this: 
[emp valueForKey:@"age"]; 
[emp setValue:@"25" forKey:@"age"];

KVO : - Key-Value Observer

El mecanismo a través del cual se notifica a los objetos cuando hay un cambio en cualquiera de las propiedades se llama KVO. Ex .: teclado de notificación

Por ejemplo, el objeto de persona está interesado en recibir una notificación cuando la propiedad accountBalance se cambia en el objeto BankAccount. Para lograr esto, Person Object debe registrarse como observador de la propiedad AccountBalance de BankAccount mediante el envío de un addObserver: forKeyPath: options: context: message.

Uso del contexto para la observación KVO

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context

El contexto es importante si envía su clase para que otros la usen. El contexto le permite a su observador de la clase verificar que es su observador el que está siendo llamado.

El problema de no pasar un observador es que, si alguna subclase de su clase registra un observador para el mismo objeto, la misma clave y no pasa un contexto, entonces se puede llamar al observador de la superclase varias veces.

Una variable que es única e interna para su uso es un buen contexto.

Para más información.

importancia y buen contexto

Observando una propiedad de una subclase NSObject

La mayoría de las funciones KVO y KVC ya están implementadas de forma predeterminada en todas NSObject subclases de NSObject .

Para comenzar a observar una propiedad llamada firstName de un objeto llamado personObject haga esto en la clase de observación:

[personObject addObserver:self
               forKeyPath:@"firstName"
                  options:NSKeyValueObservingOptionNew
                  context:nil];

El objeto al que self refiere el código anterior recibirá un observeValueForKeyPath:ofObject:change:context: cada vez que cambie la ruta clave observada.

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary<NSString *,id> *)change
                       context:(void *)context
{
    NSLog(@"new value of %@ is: %@", keyPath, change[NSKeyValueChangeNewKey]);
}

"Ruta clave" es un término KVC. NSObject subclases de NSObject implementan la funcionalidad KVC por defecto.

Se podrá acceder a una variable de instancia llamada _firstName mediante la ruta de la clave @"firstName" .

Cuando se acceda a la ruta de acceso @"firstName" , se _firstName un método getter llamado firstName , independientemente de que haya una variable de instancia setFirstName o setFirstName método setFirstName setter.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow