Ini adalah kode contoh:
NSDictionary *myDictionary = [NSDictionary dictionary];
NSNumber *myNumber = [myDictionary valueForKey: @"MyNumber"];
NSLog(@"myNumber = %@", myNumber); // output myNumber = (null)
if (myNumber == nil)
NSLog(@"test 1 myNumber == nil");
if (myNumber == NULL)
NSLog(@"test 2 myNumber == NULL");
if ([myNumber isEqual:[NSNull null]])
NSLog(@"test 3 myNumber == [NSNull null]");
Kapan saya harus menggunakan nil, NULL dan [NSNull null]?
objective-c
null
nsnull
Biranchi
sumber
sumber
nil
berarti semacamNULL
untuk instance objc. Jadi, Anda dapat menandai nilai spesifik yang dimaksudkan untuk instance objc atau penunjuk generik. Mengingat manajemen jenis dan keamanan, ini akan banyak membantu Anda.nil
dannull
/NULL
sama - keduanya didefinisikan sebagai nol. Sebagai formalitas, gunakannil
saat coding Objective-C danNULL
ketika coding pernyataan / panggilan C / C ++ biasa.NSNull
adalah sesuatu yang sama sekali berbeda. Ini adalah objek tunggal yang berfungsi sebagai tempat-penampung untuk mewakili "tidak ada" di, misalnya, NSDictionary di mana nil / null pointer tidak diizinkan.Jawaban:
Anda dapat menggunakan
nil
tentang di mana saja Anda dapat menggunakannull
. Perbedaan utama adalah bahwa Anda dapat mengirim pesannil
, sehingga Anda dapat menggunakannya di beberapa tempat di mananull
tidak dapat bekerja.Secara umum, gunakan saja
nil
.sumber
#define nil NULL
[NSNull null]
adalah binatang yang sangat berbeda. Mengutip dari Referensi Kelas NSNull , "Kelas NSNull mendefinisikan objek tunggal yang digunakan untuk mewakili nilai null dalam objek koleksi (yang tidak memungkinkan nilai nil)." Juga lihat Menggunakan bagian NSNull dari Topik Pemrograman Angka dan Nilai.NULL
.Mereka berbeda dalam tipenya. Semuanya nol, tetapi
NULL
adalahvoid *
,nil
adalahid
, danNil
merupakan penunjuk Kelas.sumber
NULL
vnil
, tapi ini sangat merindukan tanda[NSNull null]
. Lihat Menggunakan bagian NSNull dari Topik Pemrograman Nilai dan Nilai dan Referensi Kelas NSNull .void *
. Jawaban berbeda di sini sudah menyebutkan ini, tetapi jika Anda menggaliobjc.h
, Anda akan menemukan garis#define nill __DARWIN_NULL
.nil adalah nilai kosong yang terikat / sesuai dengan objek (tipe id di Objective-C). nil tidak punya referensi / alamat, hanya nilai kosong.
Jadi nihil harus digunakan, jika kita berurusan dengan suatu objek.
Sekarang NULL digunakan untuk pointer non-objek (seperti pointer C) di Objective-C. Seperti nihil , NULL tidak punya nilai atau alamat.
Jadi jika ada situasi, ketika saya perlu memeriksa struct saya (variabel tipe struktur) kosong atau tidak, saya akan menggunakan:
Mari kita punya contoh lain, the
Dari pengamatan nilai-kunci , konteksnya harus berupa pointer C atau referensi objek. Di sini untuk konteksnya kita tidak bisa menggunakan nihil ; kita harus menggunakan NULL .
Akhirnya kelas NSNull mendefinisikan objek tunggal yang digunakan untuk mewakili nilai nol dalam objek koleksi (NSArray, NSDictionary). The [NSNull nol] akan kembali dengan tunggal contoh NSNull. Pada dasarnya [NSNull null] adalah objek yang tepat.
Tidak ada cara untuk memasukkan objek nil ke objek tipe koleksi. Mari kita punya contoh:
Pada baris kedua, kita tidak akan mendapatkan kesalahan, karena sangat adil untuk memasukkan objek NSNull ke objek tipe koleksi. Pada baris ketiga, kita akan mendapatkan kesalahan "objek tidak boleh nol". Karena nihil bukan objek.
sumber
NULL dan nil adalah sama satu sama lain, tetapi nil adalah nilai objek sedangkan NULL adalah nilai pointer generik (
(void*)0
, lebih spesifik).[NSNull null]
adalah objek yang dimaksudkan untuk menggantikan nol dalam situasi di mana nol tidak diizinkan. Misalnya, Anda tidak dapat memiliki nilai nol dalam NSArray. Jadi, jika Anda perlu mewakili "nihil", Anda dapat menggunakannya[NSNull null]
.sumber
Saya telah menemukan yang berikut:
objc.h
_types.h
stddef.h
MacTypes.h
Dari tampilannya, tidak ada perbedaan selain konseptual.
sumber
Waspadalah yang
if([NSNull null])
kembalitrue
.sumber
Keduanya hanya typecast nol. Secara fungsional, tidak ada perbedaan di antara mereka. yaitu.,
Ada perbedaan, tetapi hanya untuk Anda dan manusia lain yang membaca kode, kompiler tidak peduli.
Satu hal lagi nihil adalah nilai objek sedangkan NULL adalah nilai pointer generik.
sumber
Dalam OSK OS X dan iOS modern:
nil
danNil
danNULL
identik di Objective-C dan di Objective-C ++ sebelum C ++ 11.nil
danNil
danstd::nullptr
identik di Objective-C ++ dengan C ++ 11.Secara gaya, banyak orang lebih suka menggunakan
nil
untuk objek Objective-C danNULL
ataunullptr
untuk tipe pointer lainnya. Saya sendiri sekarang menggunakannya dinil
mana-mana.[NSNull null]
adalah objek tunggal yang digunakan untuk mewakili nilai nol dalam situasi di mananil
dilarang sebagai nilai (biasanya dalam objek koleksi sepertiNSArray
atauNSDictionary
). Topik Pemrograman Angka dan Nilai: Menggunakan NSNullsumber
Untuk memperluas komentar dari @cobbal:
MacTypes.h berisi:
sumber
Seperti yang telah disebutkan, mereka sama, tetapi saya menggunakan yang satu atau yang lain tergantung pada bahasa di mana kerangka kerja yang sesuai ditulis.
Untuk semua yang berhubungan dengan Objective-C, saya menggunakan nihil. Sebagai contoh:
Namun, ketika memeriksa validitas model data dari C-framework (seperti AddressBook framework dan CoreFoundation), saya menggunakan NULL. Sebagai contoh:
Dengan cara ini, saya memiliki petunjuk halus dalam kode saya jika saya berurusan dengan kode berbasis Obj-C atau C.
sumber
nil adalah pointer objek ke nol. Meskipun secara semantik berbeda dari NULL , secara teknis mereka setara satu sama lain.
Pada level framework, Foundation mendefinisikan NSNull , yang mendefinisikan metode kelas, + null, yang mengembalikan objek NSNull singleton. NSNull berbeda dari nil atau NULL , dalam hal ini adalah objek yang sebenarnya , bukan nilai nol.
Selain itu, di Foundation / NSObjCRuntime.h, Nil didefinisikan sebagai pointer kelas ke nol.
Lihat ini untuk info lebih lanjut - nil / Nil / NULL / NSNull
sumber
Ada perbedaan dalam beberapa konteks.
Secara harfiah, Null adalah karakter: ASCII 0.
Nil sama dengan kosong, tidak ada nilai.
Tergantung pada konteks pemrograman, ini bisa menjadi perbedaan besar.
sumber
Gunakan NULL misalnya ketika Anda memanggil metode Objective-C dengan parameter tipe output (NSError **).
Saya melihat banyak contoh kode di web di mana orang memberikan nihil alih-alih NULL dalam kasus ini. Ini karena itu adalah pointer ke pointer dan dengan demikian tidak secara langsung tipe objek Objective-C. Seperti dikatakan di atas, nil harus digunakan untuk tipe objek Objective-C.
sumber
Pada dasarnya: nil: null pointer pada objek dan null: adalah untuk pointer tipe lainnya
sumber
nil berarti tidak adanya nilai sementara NULL mewakili No Object,
NSArray * array = @ [@ "Hello World!", @ 101, [NSNULL null]];
Di sini [NSNULL null] adalah objek yang berarti tidak ada objek, pada saat yang sama Anda tidak dapat menambahkan nol untuk menunjukkan tidak adanya objek.
Anda dapat menggunakan nil dan [NSNUll null] untuk memeriksa juga.
sumber
Ini akan membantu Anda memahami perbedaan antara nil, NIL dan null.
Tautan di bawah ini dapat membantu Anda dengan beberapa cara:
http://nshipster.com/nil/
sumber