ios - ¿Dónde está la diferencia entre setObject: forKey: y setValue: forKey: en NSMutableDictionary?
iphone (4)
Otra diferencia es que si le da un valor nulo a setValue:forKey:
elimina la clave del diccionario si existe, de lo contrario no hace nada. Pero si le das un valor nulo a setObject:forKey:
se genera una excepción.
Cuando miro la documentación, apenas veo una gran diferencia. Tanto "valor" como "objeto" son de tipo id , por lo que puede ser cualquier objeto. La clave es una vez una cadena, y en el otro caso una identificación. Uno de ellos parece conservar el objeto y el otro no. ¿Qué más? ¿Cuál es para qué caso?
setValue:forKey:
es parte del protocolo NSKeyValueCoding , que, entre otras cosas, le permite acceder a las propiedades de objetos de la talla de Interface Builder. setValue:forKey:
se implementa en clases distintas de NSDictionary
.
setObject:forKey:
es NSMutableDictionary''s
motivo NSMutableDictionary''s
para existir. Su firma es bastante similar a setValue: forKey :, pero es más genérica (por ejemplo, cualquier tipo de clave). Es algo así como una coincidencia que las firmas sean muy similares.
Lo que se suma a la confusión es que la implementación de setValue:forKey:
de setValue:forKey:
es equivalente a setObject:forKey:
en la mayoría de los casos. En otras clases, setValue:forKey:
cambia las variables de miembros. En NSMutableDictionary
, cambia las entradas del diccionario, a menos que prefija la tecla con un carácter ''@'', en cuyo caso modifica las variables miembro.
Entonces, en pocas palabras, use setObject:forKey:
cuando necesite trabajar con claves y valores del diccionario, y setValue:forKey:
en los casos más raros en los que necesite abordar KVP .
EDITAR: y oh, parece que esto se ha preguntado y respondido antes: ¿ diferencia entre objectForKey y valueForKey?
-setValue:forKey:
simplemente envíe -setObject:forKey:
al receptor, a menos que el valor sea nil
, en cuyo caso envíe -removeObjectForKey
.
Muerto simple.
anObject - El valor para la clave. El objeto recibe un mensaje de retención antes de ser agregado al NSDictionary
. Este valor no debe ser nulo.
aKey - La clave del valor. La clave se copia (utilizando copyWithZone:
claves deben ajustarse al protocolo NSCopying
). La clave no debe ser nula.
valor - El valor de la clave.
clave - La clave del valor. Tenga en cuenta que cuando se utiliza codificación de clave-valor, la clave debe ser una cadena (consulte "Fundamentos de codificación de clave-valor").