2012-05-25 108 views
0

我已經看過一些以前的答案,在這裏提到了一個類似的問題,但我仍然不明白。Objective-C(null)和nil之間的區別

下面是代碼(從ShareKit)

if (isDismissingView) 
    return; 

NSLog(@"presentingViewController: %@", [self.currentView presentedViewController]); 

if (self.currentView != nil) 
{ 
    // Dismiss the modal view 
    if ([self.currentView parentViewController] != nil) 
    { 
    self.isDismissingView = YES; 
    [[self.currentView parentViewController] dismissModalViewControllerAnimated:animated]; 
    } 
    // for iOS5 
    else if ([self.currentView respondsToSelector:@selector(presentingViewController)] && [self.currentView presentingViewController]) {  
    //****** it executes this block ****** 
    self.isDismissingView = YES;    
    [[self.currentView presentingViewController] dismissViewControllerAnimated:animated completion:^{ ... } 
    } 
    else 
    self.currentView = nil; 
} 

在NSLog的,其結果是(null),這顯然是不一樣的零,因爲它測試,如果它不是零

else if ([self.currentView respondsToSelector:@selector(presentingViewController)] && [self.currentView presentingViewController]) 

被執行。

所以我有三個問題。什麼是(null)?對象或指針如何變爲(null)?測試這種情況的正確方法是什麼?

+2

您是否嘗試過Cmd +單擊null和nil來查看它們的定義?也可能重複[NULL vs零在Objective-C](http://stackoverflow.com/questions/557582/null-vs-nil-in-objective-c) – CodaFi

+1

我沒有看到這是一個重複的,因爲那個問題,我看過,是指'NULL',而不是'(null)'。 – Jim

+0

如果我告訴你他們是同一件事,你會相信我嗎? ;) – CodaFi

回答

4

當您爲對象格式%@賦予一個零值時,NSLog()會打印「(null)」。你可以通過看看輸出

​​

所以驗證這個[self.currentView presentsViewController]的確是零。其他如果目前正在測試* ing * ViewController,不存在* ed * ViewController。

2

nil用於對象,null用於非對象,雖然我認爲NSLog打印null作爲對象的描述,即使它意味着nil。你有沒有試過設置一個斷點並檢查調試器在這段代碼中所說的內容?

2

您正在記錄presentedViewController,但正在測試presentingViewController

+0

謝謝,羅布和馬克。它一定在這裏遲到了。我發現它可以自動完成這兩種方式。 – Jim

相關問題