与ios中的默认字符串匹配的内容

时间:2015-09-07 07:55:02

标签: nsstring

NSString * a = @"";

我已经使用了这个空(或默认)字符串,并尝试检查它是否等于nil,Nil或NULL,但它返回NO。任何人都可以详细解释我

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");
    }

1 个答案:

答案 0 :(得分:0)

这段代码NSString * a = @"";创建了一个新的NSString。它与使用[[NSString alloc] init]完全相同。

如果你想要nil,你必须这样做NSString* a = nil

在Objective-C中,nil用于创建指向任何内容的指针,因此不要使用Nil的NULL。如果你没有关于nil / Nil / NULL的更多信息this article解释了这一切。

编辑在第一条评论中回答问题:

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

在所有这些情况下,您的NSString都是零。在objective-C中,允许在nil对象上使用方法,但它总是返回默认值,对于布尔类型为0,该值为0。这就是为什么你总是得到'N'。在这种情况下有点奇怪,因为你将nil与nil进行比较,但事实就是如此。这个post更详细一点

如果你想检查对象是否为零,请执行以下操作:

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