Di observeValueForKeyPath:ofObject:change:context:
- mengapa dokumen digunakan NULL
alih-alih nil
saat tidak menentukan penunjuk konteks?
objective-c
cocoa
null
harga erik
sumber
sumber
Jawaban:
nil
seharusnya hanya digunakan sebagai penggantiid
, apa yang akan kita pikirkan sebagai programmer Java dan C ++ sebagai pointer ke objek. GunakanNULL
untuk pointer non-objek.Lihatlah deklarasi metode itu:
Konteks adalah
void *
(yaitu pointer C-style), jadi Anda pasti akan menggunakanNULL
(yang kadang-kadang dinyatakan sebagai(void *)0
) daripadanil
(yang bertipeid
).sumber
context
diobserveValueForKeyPath:ofObject:change:context:
adalahvoid *
, tidak itu berarti bahwa data yang diberikan sebagaicontext
bisa menjadi pointer objek? Saya pikir itu adalah kasus umum. Itu sebabnya saya bingung mengapa dokumen selalu menggunakanNULL
bukannil
.Mereka secara teknis hal yang sama (0), tetapi nihil biasanya digunakan untuk tipe objek Objective-C, sementara NULL digunakan untuk pointer c-style (void *).
sumber
NULL
berbeda darinil
.nil
didefinisikan sebagai(id)0
.NULL
bukan.Mereka secara teknis hal yang sama dan hanya berbeda dalam gaya:
nil
apa yang harus digunakan untukid
tipe (dan pointer ke objek).NULL
yang Anda gunakan untukvoid *
.0
.Saya biasanya menggunakan varian yang cocok dengan bahasa tempat tipe tersebut dideklarasikan .
sumber
NULL
adalahC equivalent
ofnil
, 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.
sumber
Mereka hampir merupakan hal yang sama kecuali,
nil
digunakan dalam gaya Objective-C. di manaNULL
untuk pointer tipe C dan typdef'ed untuk(void *)
.sumber