Al mirar 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 retener el objeto, y el otro no. ¿Qué más? ¿Cuál es para qué caso?
ios
iphone
nsmutabledictionary
EI Capitán v2.0
fuente
fuente
Respuestas:
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 aNSDictionary
.setObject:forKey:
EsNSMutableDictionary'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 asetObject:forKey:
en la mayoría de los casos. En otras clases,setValue:forKey:
cambia las variables miembro. EnNSMutableDictionary
, 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, ysetValue: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?
fuente
Otra diferencia es que si le da un valor nulo
setValue:forKey:
, elimina la clave del diccionario si existe, de lo contrario no hace nada. Pero si le das un valor nulosetObject:forKey:
, genera una excepción.fuente
dic[key] = value;
para admitir la eliminación de la clave si el valor esnil
. La suscripción es generalmente un mejor enfoque quesetValue:forKey:
lograr esto.-setValue:forKey:
simplemente envíe-setObject:forKey:
al receptor, a menos que el valor seanil
, en cuyo caso envíe-removeObjectForKey
.Muy simple.
fuente
anObject : el valor de la clave. El objeto recibe un mensaje de retención antes de ser agregado a
NSDictionary
. Este valor no debe ser nulo.aKey : la clave del valor. La clave se copia (usando
copyWithZone:
; las claves deben cumplir con elNSCopying
protocolo). La clave no debe ser nula.valor : el valor de la clave.
clave : la clave del valor. Tenga en cuenta que cuando se utiliza la codificación de clave-valor, la clave debe ser una cadena (consulte “Fundamentos de la codificación de clave-valor”).
fuente