键值编码:BOOL 属性评估为 "i" 类型的 NSNumber,而不是"c"



对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];时要求nobjCType由于nNSNumber,因此i是结果而不是c

最新更新