setValue:forKey:
является частью протокола NSKeyValueCoding , который, помимо прочего, позволяет получить доступ к свойствам объекта из подобных Интерфейсному Разработчику. setValue:forKey:
реализован в классах, отличных от NSDictionary
.
setObject:forKey:
является NSMutableDictionary's
причиной существования. Его сигнатура очень похожа на setValue: forKey :, но является более общей (например, любой тип ключа). Несколько совпадение, что подписи так похожи.
Что добавляет путаницу, так это то, что реализация setValue:forKey:
в NSMutableDictionary эквивалентна setObject:forKey:
в большинстве случаев. В других классах setValue:forKey:
изменяет переменные-члены. В NSMutableDictionary
он изменяет записи словаря, если только вы не префиксируете ключ символом «@» - в этом случае он изменяет переменные-члены.
Итак, в двух словах, используйте setObject:forKey:
, когда вам нужно работать с ключами и значениями словаря, и setValue:forKey:
в более редких случаях, когда вам нужно заняться KVP .
РЕДАКТИРОВАТЬ: и о, похоже, это уже задавали и отвечали раньше: Разница между objectForKey и valueForKey?