setValue:forKey:adalah bagian dari protokol NSKeyValueCoding , yang antara lain, memungkinkan Anda mengakses properti objek dari suka Interface Builder. setValue:forKey:diimplementasikan dalam kelas selain NSDictionary.
setObject:forKey:adalah NSMutableDictionary'salasan untuk ada. Tanda tangannya kebetulan sangat mirip dengan setValue: forKey :, tetapi lebih umum (misalnya semua jenis kunci). Agak kebetulan bahwa tandatangannya sangat mirip.
Apa yang menambah kebingungan adalah bahwa implementasi NSMutableDictionary setValue:forKey:setara dengan setObject:forKey:dalam kebanyakan kasus. Di kelas lain, setValue:forKey:perubahan variabel anggota. Di NSMutableDictionary, itu mengubah entri kamus, kecuali jika Anda awalan kunci dengan karakter '@' - dalam hal ini memodifikasi variabel anggota.
Jadi, singkatnya, gunakan setObject:forKey:ketika Anda perlu bekerja dengan kunci dan nilai kamus, dan setValue:forKey:dalam kasus yang lebih jarang di mana Anda perlu menangani KVP .
Sunting: dan oh, sepertinya ini telah ditanyakan dan dijawab sebelumnya: Perbedaan antara objectForKey dan valueForKey?