iOS
Codificación del valor clave-Observación del valor clave
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.
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.