-1

我在我的项目中调用 Web 服务,用于处理 Web 服务结果有一个方法,它告诉服务返回什么。其他方法使用此值进行进一步处理。

网络问题、网络服务问题或任何 xyz 原因、网络服务处理方法返回 (null) 值。

现在我必须执行 nul 检查,两种方法对我有用

if([val isEqualToString:@"(null)"]) ...

if(!val) ...

关于检查 null 有很多问题,但没有清除我的概念。有人说如果我检查长度val.length为 6,则检查长度,因为处理程序方法返回“(null)”。我!val不清楚这是如何工作的。有些人还说检查 isKindOfClass [NSNull null] ...

请任何人都可以揭开这个空的神秘面纱。

请不要比较 nil vs Nil vs Null ...

4

1 回答 1

1

if(!val)将测试是否valnull。那应该是您想要使用的,简单明了。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]是一个单例。当您调用 时[NSNull null],它会返回 的静态实例NSNull。如果您[NSNull null]再次调用,它将返回相同的对象,无论您在哪里调用该方法。因为NSNull在您的应用程序的整个世界中只有一个实例,所以它等同于 null,因为在同一个地址上永远不会有一个对象不具有 null 的含义。

所以,正如我上面所说,它与你根本无关。仅NSNull当您需要合法的 Objective-C 对象但您希望它为“null”时才需要。它通常NSNull比简单地使用字符串@"(null)"或类似的东西更安全,因为它可能会覆盖该字符串的值,弄乱字符串比较,有时您可能需要将字符串存储@"(null)"在与您相同的数据结构中'正在存储空对象等。

于 2012-07-25T06:26:26.553 回答