我有一个NSString
对象,
NSString *aString;
那么以下两个版本是否等效?
版本 1:
if ( (NSString *)[NSNull null] == aString )
{
// Logic handling
}
版本 2:
if ( nil == aString )
{
// Logic handling
}
参考帖子
更新 - 测试结果
我的简单测试结果表明,以上两个版本有不同的行为:
何时
aString
初始化,然后分配nil
:false
对于版本 1 中的表达式,true
用于版本 2 中的表达式。何时
aString
使用 的值进行初始化@""
。false
对于版本 1 中的表达式,false
用于版本 2 中的表达式。
所以很明显,这两个版本的行为并不相同。
测试代码:
NSString *aString = nil;
NSString *bString = [NSString stringWithFormat:@""];
if ((NSString *)[NSNull null] == aString) {
NSLog(@"a1 - true");
} else {
NSLog(@"a1 - false");
}
if (nil == aString) {
NSLog(@"a2 - true");
} else {
NSLog(@"a2 - false");
}
if ((NSString *)[NSNull null] == bString) {
NSLog(@"b1 - true");
} else {
NSLog(@"b1 - false");
}
if (nil == bString) {
NSLog(@"b2 - true");
} else {
NSLog(@"b2 - false");
}
控制台输出:
2013-10-31 00:56:48.132 emptyproject[31104:70b] a1 - false
2013-10-31 00:56:48.133 emptyproject[31104:70b] a2 - true
2013-10-31 00:56:48.133 emptyproject[31104:70b] b1 - false
2013-10-31 00:56:48.133 emptyproject[31104:70b] b2 - false
更新 - 我是什么意思“空字符串”**
现在我已经更清楚地表明,一个NSString
对象是不同的nil
,它是一个有效的初始化实例,它持有一个空字符串值@""
。在这篇文章中我真正需要的是如何测试我的NSString
对象是否成功初始化,即 if aString
is nil
。我想知道上面两个版本的测试代码有没有区别。