好的,我有一种感觉,你们将能够快速指出为什么我对此感到如此困惑,但我有一个问题,为什么以下内容不会导致编译器错误或警告:
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'”?