在 Objective-C 中有很多代表「沒有東西」的東西。包括:
- NULL
- nil
- Nil
- NSNull
- NSNotFound
NULL
NULL 屬于 C 語言,表示空指針药版。大多數情況下 nil伯铣、Nil 和NULL 可以代理使用受裹,但是在語義上是有區(qū)別的。比如一個方法的某個參數為 (void *) 時斤寇,而不是 id 類型時,雖然可以傳入 Objective-C 的對象 nil拥褂,但是傳入 NULL 意義會比較清楚娘锁。在 NSTimer 的時候 userInfo 的類型是 id,這時候我們傳入 nil 會比較合適饺鹃。
nil
nil 表示 Objective-C 中的空對象莫秆。我們可以對 nil 對象調用任何 method,當然都不會什么反應悔详。
Nil
Nil 表示空對象的 class镊屎。比如,當我們想判斷某個 Class 是不是空的時候語義上應該用 Nil 而不是nil茄螃。(但實際上在代碼層面 nil 和 Nil 是一樣的)
NSNull
NSNull 是一個確實存在 Objective-C 對象缝驳。因為我們無法在 array 或者 dictionary 中插入 nil,但有時候會需要一個東西代表「沒有東西」归苍,這個時候我們可以使用[NSNull null]
用狱。
在 JSON 轉化成 Objective-C 對象的場景中 JSON 里面的 null
就會轉成對應的 NSNull
NSNotFound
NSNotFound
表示找不到這個東西的 index。比如找 @[@1,@2,@3]拼弃,需找@4就會返回 NSNotFound
夏伊。其實 NSNotFound
就是整數的最大值。