Глядя на документацию, я почти не вижу большой разницы. И «значение», и «объект» имеют тип id , поэтому может быть любым объектом. Ключ один раз является строкой, а в другом случае - идентификатором. Один из них, кажется, сохраняет объект, а другой нет. Что еще? Какой для какого случая?
ios
iphone
nsmutabledictionary
EI Captain v2.0
источник
источник
Ответы:
setValue:forKey:
является частью протокола NSKeyValueCoding , который, помимо прочего, позволяет вам получать доступ к свойствам объекта, например, Interface Builder.setValue:forKey:
реализуется в других классах, чемNSDictionary
.setObject:forKey:
этоNSMutableDictionary's
причина для существования. Его сигнатура очень похожа на setValue: forKey :, но является более общей (например, любой тип ключа). Это отчасти совпадение, что подписи так похожи.Что добавляет путаницу, так это то, что реализация NSMutableDictionary
setValue:forKey:
эквивалентнаsetObject:forKey:
в большинстве случаев. В других классахsetValue:forKey:
изменяются переменные-члены. InNSMutableDictionary
, он изменяет записи в словаре, если только вы не ставите перед ключом символ «@» - в этом случае он изменяет переменные-члены.Итак, в двух словах, используйте,
setObject:forKey:
когда вам нужно работать со словарными ключами и значениями, иsetValue:forKey:
в более редких случаях, когда вам нужно заняться KVP .РЕДАКТИРОВАТЬ: и о, похоже, это уже спрашивали и отвечали раньше: Разница между objectForKey и valueForKey?
источник
Другое отличие состоит в том, что если вы передаете значение nil
setValue:forKey:
, он удаляет ключ из словаря, если он существует, в противном случае ничего не делает. Но если вы даете ноль значениеsetObject:forKey:
, это вызывает исключение.источник
dic[key] = value;
чтобы поддержать удаление ключа, если значение равноnil
. Подписка, как правило, лучший подход, чемsetValue:forKey:
сделать это.-setValue:forKey:
просто отправьте-setObject:forKey:
получателю, если не указано значениеnil
, и в этом случае отправьте-removeObjectForKey
.Смертельно просто.
источник
anObject - значение для ключа. Объект получает сообщение сохранения перед добавлением в
NSDictionary
. Это значение не должно быть ноль.aKey - Ключ для значения. Ключ копируется (используется
copyWithZone:
; ключи должны соответствоватьNSCopying
протоколу). Ключ не должен быть нулевым.значение - значение для ключа.
ключ - ключ для значения. Обратите внимание, что при использовании кодирования значения ключа ключ должен быть строкой (см. «Основы кодирования значения ключа»).
источник