Di observeValueForKeyPath:ofObject:change:context:
- mengapa dokumen digunakan NULL
alih-alih nil
saat tidak menentukan penunjuk konteks?
Di observeValueForKeyPath:ofObject:change:context:
- mengapa dokumen digunakan NULL
alih-alih nil
saat tidak menentukan penunjuk konteks?
Jawaban:
nil
seharusnya hanya digunakan sebagai pengganti id
, apa yang akan kita pikirkan sebagai programmer Java dan C ++ sebagai pointer ke objek. Gunakan NULL
untuk 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
).
context
di observeValueForKeyPath:ofObject:change:context:
adalah void *
, tidak itu berarti bahwa data yang diberikan sebagai context
bisa menjadi pointer objek? Saya pikir itu adalah kasus umum. Itu sebabnya saya bingung mengapa dokumen selalu menggunakan NULL
bukan 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:
nil
apa yang harus digunakan untuk id
tipe (dan pointer ke objek).NULL
yang Anda gunakan untuk void *
.0
.Saya biasanya menggunakan varian yang cocok dengan bahasa tempat tipe tersebut dideklarasikan .
NULL
adalah C equivalent
of 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,
nil
digunakan dalam gaya Objective-C. di mana NULL
untuk pointer tipe C dan typdef'ed untuk (void *)
.