setValue:forKey:
forma parte del protocolo NSKeyValueCoding , que, entre otras cosas, le permite acceder a las propiedades de los objetos de la talla de Interface Builder. setValue:forKey:
se implementa en clases distintas a NSDictionary
.
setObject:forKey:
Es NSMutableDictionary's
razón para existir. Su firma es bastante similar a setValue: forKey :, pero es más genérica (por ejemplo, cualquier tipo de clave). Es una coincidencia que las firmas sean tan similares.
Lo que se agrega a la confusión es que la implementación de NSMutableDictionary setValue:forKey:
es equivalente a setObject:forKey:
en la mayoría de los casos. En otras clases, setValue:forKey:
cambia las variables miembro. En NSMutableDictionary
, cambia las entradas del diccionario, a menos que prefiera la clave con un carácter '@', en cuyo caso modifica las variables miembro.
En pocas palabras, úselo 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?