NSNull是否等于NSNull

Nam*_*ame 0 objective-c nsnull

是[[NSNull null] isEqual:[NSNull null]] == YES?

测试id是否为NSNull的正确方法是什么.同样,如果检查两个集合是否相等并且它们都包含NSNull,它们是否仍然被认为是相等的?

Car*_*rum 6

假设你的意思是:

[[NSNull null] isEqual:NSNull]
Run Code Online (Sandbox Code Playgroud)

不,NSNull是一个阶级,而不是一个对象.你无法将其与之进行有意义的比较[NSNull null].[NSNull null]尽管如此,你将永远得到同一个物体- 它是一个单身人士.从文档:

+ (NSNull *)null
返回值
NSNull的单例实例.

这意味着这个表达式:

[NSNull null] == [NSNull null]
Run Code Online (Sandbox Code Playgroud)

总是回来1.同样:

[[NSNull null] isEqual:[NSNull null]]
Run Code Online (Sandbox Code Playgroud)

会回来YES.

例:

#include <Foundation/Foundation.h>

int main(void)
{
    @autoreleasepool
    {
        NSLog(@"%d", [[NSNull null] isEqual:[NSNull null]]);
        NSLog(@"%d", [NSNull null] == [NSNull null]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

建设和运营:

$ clang example.m -o example -framework Foundation
$ ./example 
2013-08-30 14:56:21.200 example[27901:707] 1
2013-08-30 14:56:21.201 example[27901:707] 1
Run Code Online (Sandbox Code Playgroud)