好的,我有一种感觉,你们将能够快速指出为什么我对此感到如此困惑,但我有一个问题,为什么以下内容不会导致编译器错误或警告:
NSString * intValue = [ NSString stringWithFormat:@"int = %i", [ [ self.selectedObject valueForKey:name ] integerValue ] ];
selectedObject
是 a NSObject
,并且name
恰好是 a@property
类型的名称int
。
令我困惑的是为什么编译器完全愿意假设 的返回结果[ self.selectedObject valueForKey:name ]
是类型的NSNumber *
(不进行类型转换),以便通过调用来链接消息integerValue
。
显然,KVC 将非对象“数字”类型包装到NSNumber
中,但是编译器无法知道在这种特殊情况下-valueForKey:
会返回一个。NSNumber *
为什么这不会导致编译器警告“id
可能无法响应' -integerValue
'”?