objC检查空字符串,isEqualToString:@“”vs长度

时间:2012-11-21 20:13:43

标签: objective-c syntax compare string

我有一个字符串

NSString hi;

我不知道会初始化它的值。可能是零,可能是空字符串,可能是任何东西。

使用

有什么好处
if (![hi length])

VS

if (![hi isEqualToString:@""])

似乎两种情况都为空字符串,nil和任何其他类型的字符串返回相同的值。我猜想长度更好,因为它更有效率。它只返回一个变量,而isEqualToString必须进行比较。

3 个答案:

答案 0 :(得分:7)

他们没有做同样的事情。

对于nil或空字符串,

[hi length]将返回0,对于任何其他字符串,

[hi isEqualToString:@""]将返回非零值。

hi为空字符串时,

hi将返回1;当hi为nil或任何非空字符串时,

nil将返回0。

换句话说,两行代码给出相同结果的{{1}}的唯一值是{{1}}。

您可能想要选项#1的行为(将nil或空字符串视为“空白”,将任何其他值视为“非空白”),这样就可以使用。

答案 1 :(得分:4)

  

使用if (![hi length])

有什么好处

是。它可以同时检查nil的空字符串。您不能使用isEqualToString:执行此操作,因为如果字符串为nil,则发送给它的任何消息都将返回零,因此它看起来不会等于空字符串,因此需要另一张支票。

顺便说一句,为清楚起见,您应该考虑使用if (hi.length != 0)

答案 2 :(得分:2)

我会做以下

if (hi && ![hi isEqualToString:@""]) {

}
如果![hi isEqualToString:@""]hi

nil会让你真实。