对BOOL类型的属性使用NSObject valueForKey:
时(此处为其他人的示例代码),返回的NSNumber不是@encode(BOOL) = "c"
,而是"i"。为什么?
BOOL
不是基本类型,它是signed char
的typedef。因此,在运行时,无法判断属性是布尔值还是整数值。因此,我们可以确定-valueForKey:
没有使用+numberWithBool:
来包装该值。所以问题是,为什么它不使用+numberWithChar:
?可能是为了简单起见。如果所有带符号的整数值<=使用CCD_ 9对CCD_。真正的问题是,为什么这很重要?如果您向生成的NSNumber
对象询问-boolValue
,您将得到正确的响应。
这是链接网站的代码:
MyClass *c = [[MyClass alloc] init];
c.aaa = YES;
NSNumber *n = [c valueForKey:@"aaa"];
NSString *s = [NSString stringWithCString:[n objCType] encoding:NSUTF8StringEncoding];
NSLog(@"ObjC type - %@", s); // Prints 'i' instead of 'c'
似乎您在使用[n objCType];
时要求n
的objCType
由于n
是NSNumber
,因此i
是结果而不是c
。