setValue:forKey:
є частиною протоколу NSKeyValueCoding , який, крім усього іншого, дозволяє вам отримувати доступ до властивостей об’єкта з лайків Interface Builder. setValue:forKey:
реалізується в інших класах NSDictionary
.
setObject:forKey:
є NSMutableDictionary's
підставою існувати. Його підпис, як правило, схожий на setValue: forKey :, але більш загальний (наприклад, будь-який тип ключа). Дещо збіг обставин, що підписи такі схожі.
Що додає плутанини в тому, що реалізація NSMutableDictionary setValue:forKey:
еквівалентна setObject:forKey:
у більшості випадків. В інших класах setValue:forKey:
змінює членські змінні. У NSMutableDictionary
ньому він змінює записи словника, якщо ви не встановите префікс ключа символом "@" - у цьому випадку він змінює членські змінні.
Отже, у двох словах, використовуйте, setObject:forKey:
коли вам потрібно працювати зі словниковими ключами та значеннями, а також setValue:forKey:
у більш рідкісних випадках, коли вам потрібно вирішити KVP .
EDIT: і о, схоже, на це було задано і відповіли раніше: Різниця між objectForKey та valueForKey?