此KVC验证方法中的类型是否重要?

时间:2010-06-13 08:22:19

标签: iphone validation core-data key-value-coding

例如,在文档中,KVC样式的验证方法实现如下:

-(BOOL)validateAge:(id *)ioValue error:(NSError **)outError

他们使用id *作为ioValue的类型。由于这不是方法签名的一部分,我想知道做以下事情是否会有害:

-(BOOL)validateAge:(NSNumber *)ioValue error:(NSError **)outError

KVC仍然可以吗?

1 个答案:

答案 0 :(得分:1)

那不行,因为它们不一样。 id*将更接近NSNumber**,因为该方法接受指向指针的指针。所以你的方法看起来像:

-(void)validateAge:(NSNumber**)ioValue error:(NSError**)outError

但这样做有 NO 点。 id可以完美地处理您需要做的所有事情,如果您更改它,然后稍后调整该属性,可能会在您的应用程序中引入一个微妙的错误。

简短回答,是的,您可以更改输入参数类型;但你真的不应该。