Objective C ‘de, 4 tip null kullanımı görebilirsiniz; compiler açısından bakmak gerekirse;
NULL aslında “0” olan C diline ait header; “stddef.h” içinde tanımlanmış bir macrodur.
#define NULL ((void *)0)
Genel olarak ObjC ile uğraşan developerler NULL değeri için nil kullanır, dilin conventionlarından gelen bu durum, aslında nil veya Nil ‘in “NSObjCRuntime.h” headerı içerisinde şöyle tanımlanmasından kaynaklanır;
#define nil NULL #define Nil NULL
Nil özelde convention gereği null class ‘ları temsil için kullanılır.
NULL ‘un değeri 0 olduğuna göre compiler açısından bir objeyi “no value” ile karşılaştırma yapmak için aşağıda yazdığım tüm satır birbirine eşittir ve aynı kodu generate ederler.
NULL, nil, Nil, 0, false, NO
Yani;
if ( NullObject == false ) {
// Bu blok çalıştırılacaktır.
}
false yerine üst satırda yer alan herhangi bir NULL değerini koyabilirsiniz.
NSNull ise singleton dizaynında bir objective-c class’ıdır ve nsobject base class’ından türemiştir, herhangi bir durumda elimizdeki array’e veya dictionary’e value olarak null koymak istersek;
[NSNull null] eklememiz yeterlidir.
[myMutableArray addObject:nil]; // Run time exception [myMutableArray addObject:[NSNull null]]; // Perfectly valid
