2012-10-12 35 views
3

我實際上正在調試我的iOS應用程序:我想測試一個變量是否爲空:種類的空變量IOS

愚蠢的問題呵呵!

if (var !=nil) { doSomeWork ; } 

所以,如果變量var是等於零,我們希望在調試器中要打印的區域這樣的結果,我們將有這樣的事情:

2012年10月12日21:33:01.553應用程序的名稱[892:13d03](空)

這是涼的,但的確當我嘗試打印在調試器區中的變量的內容,它已被示出:

2012年10月12日21:33:01.553應用名稱[892:13d03] < null>

你能告訴我這兩種null是什麼區別,我如何測試第二個是否等於零。

預先感謝

回答

6

第二輸出,<null>,來自NSNull單。這是一個名爲NSNull的類,它有一個類方法+null,每次都返回相同的單例實例NSNull。這個類別的主要目的是它可以作爲nil的替身,在你不能放置nil的地方,例如收藏中。例如,當JSON包含null時,JSON庫通常會返回NSNull

你可以簡單地通過詢問它是否爲==[NSNull null](因爲它是單身人士),或者可能是[obj isKindOfClass:[NSNull null]]來測試。如果你喜歡,你可以使用[obj isEqual:[NSNull null]]。你甚至可以問是否== kCFNull如果你想,因爲CFNullNSNull免費橋接。無論你想要的風格取決於你。

+0

太棒了!謝謝你,你的答案是如此完整和清晰 – Ali

+0

「因爲CFNull和NSNull免費橋接」這是沒有記錄 – user102008

+0

@ user102008:嗯,你說得對。但驗證相當容易。如果你評估'[kCFNull類]'你會得到'NSNull'。另外,'kCFNull == [NSNull null]'是真的(因爲它是一個單例)。 –

0

NSNull它是類,nil不是。因此,如果您正在比較nil與您應該使用「==」的東西,如果NSNull那麼 - >if ([var isEqual:[NSNull null]]) { ....}