Di observeValueForKeyPath:ofObject:change:context:- mengapa dokumen digunakan NULLalih-alih nilsaat tidak menentukan penunjuk konteks?
Di observeValueForKeyPath:ofObject:change:context:- mengapa dokumen digunakan NULLalih-alih nilsaat tidak menentukan penunjuk konteks?
Jawaban:
nilseharusnya hanya digunakan sebagai pengganti id, apa yang akan kita pikirkan sebagai programmer Java dan C ++ sebagai pointer ke objek. Gunakan NULLuntuk pointer non-objek.
Lihatlah deklarasi metode itu:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
Konteks adalah void *(yaitu pointer C-style), jadi Anda pasti akan menggunakan NULL(yang kadang-kadang dinyatakan sebagai (void *)0) daripada nil(yang bertipe id).
contextdi observeValueForKeyPath:ofObject:change:context:adalah void *, tidak itu berarti bahwa data yang diberikan sebagai contextbisa menjadi pointer objek? Saya pikir itu adalah kasus umum. Itu sebabnya saya bingung mengapa dokumen selalu menggunakan NULLbukan nil.
Mereka secara teknis hal yang sama (0), tetapi nihil biasanya digunakan untuk tipe objek Objective-C, sementara NULL digunakan untuk pointer c-style (void *).
Mereka secara teknis hal yang sama dan hanya berbeda dalam gaya:
nilapa yang harus digunakan untuk idtipe (dan pointer ke objek).NULLyang Anda gunakan untuk void *.0.Saya biasanya menggunakan varian yang cocok dengan bahasa tempat tipe tersebut dideklarasikan .
NULLadalah C equivalentof nil, sebuah pointer ke nothing;
di mana nil is zero typed as id,
NULL is zero typed as void*.
Satu poin penting Anda tidak dapat mengirim pesan ke NULL. Jadi lebih disukai menggunakan nihil di objektif-C di banyak tempat.
Mereka hampir merupakan hal yang sama kecuali,
nildigunakan dalam gaya Objective-C. di mana NULLuntuk pointer tipe C dan typdef'ed untuk (void *).