我在我的项目中调用Web服务,为了处理Web服务结果,有一个方法,它告诉服务返回什么。其他方法使用此值进行进一步处理。
网络问题,webserivce问题或任何xyz原因,webserivce处理方法返回(null)值。
现在我必须执行nul检查,两种方法适合我
if([val isEqualToString:@"(null)"]) ...
if(!val) ...
有许多关于检查null的问题,但没有清除我的概念。
有人说检查长度,如果我检查长度,如val.length
它将是6,因为处理程序方法返回“(null)”。 !val
我不清楚这是如何运作的。有人还说检查isKindOfClass [NSNull null] ...
任何人都可以揭开这个空虚的神秘面纱。
请不要比较nil vs Nil vs Null ...
答案 0 :(得分:1)
if(!val)
将测试val
是null
。这应该是你想要使用的,简单明了。 if(val == nil)
是等效的。
[val isEqualToString:@"null"]
将测试val
是否等于字符串" null"这肯定会使它不是null
。
[val isKindOfClass:[NSNull class]]
目前与您无关,所以请不要担心。
编辑,因为您要求解释NSNull
:
有时,您需要能够存储nil
的概念而不是nil
本身。
假设您想要一个内置nil
的数组。您希望阵列看起来像[obj1, obj2, nil, obj3]
。
你不能声明像[NSArray arrayWithObjects:obj1, obj2, nil, obj3, nil]
这样的数组,因为当它看到nil
它会停止时,它会通过参数。这将导致数组[obj1, obj2]
,这不是您想要的。
那么在这种情况下你会怎么做?你制作阵列[NSArray arrayWithObjects:obj1, obj2, [NSNull null], obj3]
。现在你的数组中有一个对象,但是这个特定的对象是系统中的每个人都同意调用的对象" null。" 它实际上并不为空。
这里真正发生的是[NSNull null]
singleton。当您致电[NSNull null]
时,它会返回NSNull
的静态实例。如果再次调用[NSNull null]
,它将返回同一个对象,无论您在何处调用该方法。因为在您的应用的整个世界中只有一个NSNull
实例,它的等效为null,因为在同一地址永远不会有一个对象没有&#39 ; t具有空意义。
所以,正如我上面所说的那样,它根本与你无关。如果您需要合法的Objective-C对象,但是您希望它是" null,则只需要NSNull
。"使用NSNull
通常比使用@"(null)"
或类似的字符串更安全,因为有可能覆盖该字符串的值,搞乱字符串比较,有时候在线下您可能需要将字符串@"(null)"
存储在与存储空对象等相同的数据结构中。