Ao olhar para a documentação, quase não vejo grande diferença. Tanto "valor" quanto "objeto" são do tipo id , portanto, pode ser qualquer objeto. Key já foi uma string e, no outro caso, um id. Um deles parece reter o objeto e o outro não. O quê mais? Qual é para qual caso?
ios
iphone
nsmutabledictionary
EI Captain v2.0
fonte
fonte
Respostas:
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ãoNSDictionary
.setObject:forKey:
é umaNSMutableDictionary'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:
é equivalentesetObject:forKey:
na maioria dos casos. Em outras classes,setValue:forKey:
altera as variáveis de membro. EmNSMutableDictionary
, 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?
fonte
Outra diferença é que, se você atribuir um valor nulo
setValue:forKey:
, ele removerá a chave do dicionário, se existir, caso contrário, não fará nada. Mas se você atribuir um valor nulosetObject:forKey:
, isso gera uma exceção.fonte
dic[key] = value;
para apoiar a remoção da chave, se o valor fornil
. A assinatura é geralmente uma abordagem melhor dosetValue:forKey:
que fazer isso.-setValue:forKey:
basta enviar-setObject:forKey:
para o destinatário, a menos que o valor sejanil
, nesse caso, enviar-removeObjectForKey
.Simplesmente morto.
fonte
anObject - O valor da chave. O objeto recebe uma mensagem de retenção antes de ser adicionado ao
NSDictionary
. Este valor não deve ser nulo.aKey - A chave para o valor. A chave é copiada (usando
copyWithZone:
; as teclas devem estar em conformidade com oNSCopying
protocolo). A chave não deve ser nula.valor - o valor da chave.
chave - a chave para o valor. Observe que, ao usar a codificação de valor-chave, a chave deve ser uma string (consulte “Fundamentos da codificação de valor-chave”).
fonte