2010-06-13 11 views
0

Par exemple, dans la documentation d'une méthode de validation de style KVC est mis en œuvre comme ceci:Le type dans cette méthode de validation KVC est-il important?

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

Ils ont utilisé id * comme type pour ioValue. Puisque ce n'est pas une partie de la signature de la méthode, je me demande si ce serait mal faire quelque chose comme:

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

Est-ce toujours bien avec KVC?

Répondre

1

Cela ne fonctionnerait pas parce qu'ils ne sont pas identiques. id* serait plus proche de NSNumber** car la méthode accepte un pointeur vers un pointeur. Donc, votre méthode ressemblerait à ceci:

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

Mais il y a point NO à le faire. id fonctionnera parfaitement bien pour tout ce que vous devez faire et si vous le modifiez et que vous ajustez cet attribut plus tard, vous pouvez introduire une erreur subtile dans votre application.

Réponse courte, oui vous pouvez modifier le type de paramètre d'entrée; mais vous ne devrait pas vraiment.