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's
alasan 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?