例如,在文档中,KVC样式的验证方法实现如下:
-(BOOL)validateAge:(id *)ioValue error:(NSError **)outError
他们使用id *作为ioValue的类型。由于这不是方法签名的一部分,我想知道做以下事情是否会有害:
-(BOOL)validateAge:(NSNumber *)ioValue error:(NSError **)outError
KVC仍然可以吗?
答案 0 :(得分:1)
那不行,因为它们不一样。 id*
将更接近NSNumber**
,因为该方法接受指向指针的指针。所以你的方法看起来像:
-(void)validateAge:(NSNumber**)ioValue error:(NSError**)outError
但这样做有 NO 点。 id
可以完美地处理您需要做的所有事情,如果您更改它,然后稍后调整该属性,可能会在您的应用程序中引入一个微妙的错误。
简短回答,是的,您可以更改输入参数类型;但你真的不应该。