【发布时间】:2010-01-16 08:06:41
【问题描述】:
好的,我觉得你们可以快速指出我为什么对此感到困惑,但我有一个问题,为什么以下内容不会导致编译器错误或警告:
NSString * intValue = [ NSString stringWithFormat:@"int = %i", [ [ self.selectedObject valueForKey:name ] integerValue ] ];
selectedObject 是一个NSObject,而name 恰好是@property 类型的int 的名称。
令我困惑的是为什么编译器完全愿意假设[ self.selectedObject valueForKey:name ] 的返回结果是NSNumber * 类型(不进行类型转换),以便通过调用integerValue 链接消息。
显然,KVC 将非对象“数字”类型包装到 NSNumber 中,但编译器无法知道在这种特殊情况下 -valueForKey: 将返回 NSNumber *。
为什么这不会导致编译器警告类似于“id may not respond to '-integerValue'”?
【问题讨论】:
标签: objective-c types inference