2015-09-07 61 views
1
NSString * a = @""; 

我已經採取了這個空的(或默認)字符串,並試圖檢查它是否等於零,無或NULL,但它返回NO。任何人都可以解釋我詳細什麼與ios中的默認字符串匹配

if ([a isEqual:NULL]) { 
     NSLog(@"Yes"); 
    } else { 
     NSLog(@"No"); 
    } 

if ([a isEqual:nil]) { 
     NSLog(@"Yes"); 
    } else { 
     NSLog(@"No"); 
    } 

if ([a isEqual:Nil]) { 
     NSLog(@"Yes"); 
    } else { 
     NSLog(@"No"); 
    } 

回答

0

這段代碼NSString * a = @"";創建一個新的NSString。這與使用[[NSString alloc] init]完全相同。

如果你想零,你必須這樣做NSString* a = nil

在Objective-C中,nil用於創建指向無的指針,所以不要使用NULL的NULL。如果你想了解更多關於nil/Nil/NULL的更多信息this article解釋一切。

編輯在第一評論答題:

NSString *fileName = nil; 
NSLog(@"%@",[fileName isEqual:nil][email protected]"S":@"N"); 
NSLog(@"%@",[fileName isEqualTo:nil][email protected]"S":@"N"); 
NSLog(@"%@",[fileName isEqualToString:nil][email protected]"S":@"N"); 

在所有這些情況下,您的NSString是零。在Objective-C中,它允許在一個nil對象上使用方法,但它總是返回一個默認值,即0。對於布爾類型是0。這就是爲什麼你總是得到'N'。在這種情況下有點奇怪,因爲你將零與零比較,但事實就是這樣。這post去點點進入詳細

如果你想檢查的對象是零做這樣的事情:

if (filename) { 
    // Do something with filename 
} else { 
    // filename is nil 
} 
+0

可以請你經歷這個的NSString *文件名=零; NSLog(@「%@」,[fileName isEqual:nil]?@「S」:@「N」); NSLog(@「%@」,[fileName isEqualTo:nil]?@「S」:@「N」); NSLog(@「%@」,[fileName isEqualToString:nil]?@「S」:@「N」);我已經嘗試所有這些,但在所有情況下的結果是「N」fileName分配爲零....但爲什麼我得到「N」??????? – Sunil

相關問題