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