setValue:forKey:
faz parte do protocolo NSKeyValueCoding , que, entre outras coisas, permite acessar propriedades de objetos como o Interface Builder. setValue:forKey:
é implementado em outras classes que não NSDictionary
.
setObject:forKey:
é uma NSMutableDictionary's
razão para existir. Sua assinatura é bem parecida com setValue: forKey :, mas é mais genérica (por exemplo, qualquer tipo de chave). É uma coincidência que as assinaturas sejam tão semelhantes.
O que aumenta a confusão é que a implementação de NSMutableDictionary setValue:forKey:
é equivalente setObject:forKey:
na maioria dos casos. Em outras classes,setValue:forKey:
altera as variáveis de membro. Em NSMutableDictionary
, ele altera as entradas do dicionário, a menos que você prefixe a chave com um caractere '@' - nesse caso, modifica as variáveis de membro.
Então, em poucas palavras, use setObject:forKey:
quando precisar trabalhar com chaves e valores do dicionário e, setValue:forKey:
nos casos mais raros, em que você precisará enfrentar o KVP .
EDIT: e oh, parece que isso foi perguntado e respondido antes: Diferença entre objectForKey e valueForKey?