2011-09-12 74 views
0

有人可以指向特定的「id類型文檔」嗎?我已經通過了動態打字文檔,但我想知道如何使用類型ID。具體如何檢查id是否爲空。id動態類型文檔

回答

3

id類型與Objective-C語言本身直接相關,而不是Cocoa/Cocoa Touch框架,因爲您的原始標記暗示了這一點。也沒有涉及動態打字。 Here's a little introduction in Apple's docs.

爲了回答您的具體問題,從上面的鏈接引用:

關鍵字nil被定義爲一個空的對象,id0值。 id,nil,Objective-C的其他基本類型在頭文件objc/objc.h中定義。

nilNULL是等價的(零指針),因此可以互換。

在基本的if語句,你只是這樣做:

id myId = [[something alloc] init]; 

// Short for if (myId == nil) 
if (!myId) { 
    // myId is nil 
} else { 
    // myId is not nil 
} 
+0

'id'就像*在路徑通配符中。它通常與類別結合使用來定義委託類型,例如:id ZhangChn

+0

單身對象NSNull,對象何時使用?謝謝。 –

+0

直接從Apple獲得它:「NSNull類定義了一個單獨的對象,用於在nil被禁止作爲值的情況下表示空值(通常在像數組或字典這樣的集合對象中)。」 –

0

很抱歉,如果我誤解了你的問題,但不會你只是這樣做:

// given 
id sender; 

if (sender == nil) {} 

基本上你使用id捕捉可能分配給它的任何對象。所以,你可以這樣做:

id name = [NSString stringWithString:@"john"]; 

,現在的名字將是NSString對象,你可以通過調用[name class]驗證。

查看this page的ID部分了解更多信息。

+0

是這就是我的想法,但我得到的id對象設置爲[NSNull null]而不是空,「if(myIdVar)」檢查不起作用...這就是爲什麼我只是想確保它具體到我在做什麼。 –

1

請參閱The Objective-C Programming Language - 具體來說,關於對象,類和消息的章節。

在Objective-C中,對象標識符具有不同的數據類型:id。這種類型是任何類型對象的普通類型,不管類是什麼類型的,都可以用於類的實例和類對象本身。

關鍵字nil被定義爲一個空對象,一個值爲0的id,nil和其他基本類型的Objective-C在頭文件objc/objc.h中定義。

要按值比較變量,只需使用==運算符。因此,爲了測試零,你這樣做:

someVariable == nil 
1

我從來沒見過它顯然在任何其他的答案說,所以我會在這裏說:

id被定義爲一個指向對象。

nil爲零鑄造爲一個id - (ID)0 - 結果如下代碼:

NSString * myString = nil; 
id idString = myString; 
if (idString == nil) NSLog(@"idString == nil"); 
if (idString == NULL) NSLog(@"idString == NULL"); 
if (idString == (id)0) NSLog(@"idString == (id)0"); 

將具有以下輸出:

2011-09-12 07:25:57.297 Sample Project[22130:707] idString == nil 
2011-09-12 07:25:57.298 Sample Project[22130:707] idString == NULL 
2011-09-12 07:25:57.299 Sample Project[22130:707] idString == (id)0