Ketika melihat dokumentasi, saya hampir tidak melihat perbedaan besar. Baik "nilai" dan "objek" bertipe id , jadi bisa berupa objek apa pun. Kunci pernah menjadi string, dan dalam hal lain id. Salah satu dari mereka tampaknya mempertahankan objek, dan yang lainnya tidak. Apa lagi? Yang mana untuk kasus apa?
ios
iphone
nsmutabledictionary
EI Captain v2.0
sumber
sumber
Jawaban:
setValue:forKey:
adalah bagian dari protokol NSKeyValueCoding , yang antara lain, memungkinkan Anda mengakses properti objek dari suka Interface Builder.setValue:forKey:
diimplementasikan dalam kelas selainNSDictionary
.setObject:forKey:
adalahNSMutableDictionary'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 dengansetObject:forKey:
dalam kebanyakan kasus. Di kelas lain,setValue:forKey:
perubahan variabel anggota. DiNSMutableDictionary
, 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, dansetValue: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?
sumber
Perbedaan lainnya adalah bahwa jika Anda memberikan nilai nol
setValue:forKey:
, itu menghapus kunci dari kamus jika ada, jika tidak maka tidak ada artinya. Tetapi jika Anda memberikan nilai nolsetObject:forKey:
, itu menimbulkan pengecualian.sumber
dic[key] = value;
untuk mendukung penghapusan kunci jika nilainyanil
. Berlangganan umumnya merupakan pendekatan yang lebih baik daripadasetValue:forKey:
melakukan hal ini.-setValue:forKey:
kirim saja-setObject:forKey:
ke penerima, kecuali nilainyanil
, dalam hal ini kirim-removeObjectForKey
.Sangat sederhana.
sumber
anObject - Nilai untuk kunci. Objek menerima pesan retain sebelum ditambahkan ke
NSDictionary
. Nilai ini tidak boleh nol.aKey - Kunci untuk nilai. Kunci disalin (menggunakan
copyWithZone:
; kunci harus sesuai denganNSCopying
protokol). Kuncinya tidak boleh nol.value - Nilai untuk kunci.
key - Kunci untuk nilai. Perhatikan bahwa saat menggunakan pengkodean nilai-kunci, kuncinya harus berupa string (lihat “Dasar-dasar Pengodean Nilai-Kunci”).
sumber