为什么@(NO)不是NSNumber类

Anc*_*inu 1 types boolean class objective-c

我有一个奇怪的行为,似乎是由于iOS中的一些实习烹饪.

当我做 :

id data1 = @(NO);
if ([data1 isKindOfClass:[NSNumber class]]) {
    // doesn't come here.
}
Run Code Online (Sandbox Code Playgroud)

@(YES)它完美地工作.

首先,我想了解原因.其次,我想知道你会怎么做?(因为id也可以是文本).

答案:

实际上,@(NO)是一类NSNumber,我的问题是由于其他一些错误.

rma*_*ddy 5

只需使用@NO@YESNSNumber代表实例NOYES.

无论[@(NO) class][@(YES) class]给予__NSCFBoolean.

而且[@NO class][@YES class]要付出代价__NSCFBoolean.

在所有四种情况下,检查isKindOfClass:[NSNumber class]返回true.

  • `@NO`和`@(NO)`返回相同的对象,所以这应该没有区别.并且`[data1 isKindOfClass:[NSNumber class]]`*确实*为我返回YES ... (2认同)