La mise en œuvre de [self doesNotRecognizeSelector:_cmd]
est de lancer une exception. le résultat attendu est donc une exception levée. si vous attendez un retour nul, il suffit de retourner nil dans la méthode et de faire no appelez doesNotRecognizeSelector:
se référer à doc de la pomme
Le système d'exécution invoque cette méthode chaque fois qu'un objet reçoit un message un message aSelector auquel il ne peut pas répondre ou qu'il ne peut pas transmettre. Cette méthode, en soulève une NSInvalidArgumentException et génère un message d'erreur. d'erreur.
Tout message doesNotRecognizeSelector : est généralement envoyé uniquement par le système d'exécution. Toutefois, ils peuvent être utilisés dans le code du programme pour empêcher une méthode méthode d'être héritée. Par exemple, une sous-classe de NSObject pourrait renoncer à la méthode copy ou init en la réimplémentant pour inclure un message doesNotRecognizeSelector : message comme suit :
- (id)copy {
[self doesNotRecognizeSelector:_cmd];
}
La variable _cmd est un argument caché passé à chaque méthode qui est le sélecteur actuel ;
dans cet exemple, il identifie le sélecteur de la méthode de copie. Ce code empêche les instances de la sous-classe de répondre aux messages de copie ou les superclasses de transmettre des messages de copie, bien que la fonction respondsToSelector : signalera quand même que le récepteur a accès à une une méthode de copie.
Si vous surchargez cette méthode, vous devez appeler super ou lever un ou lever une exception NSInvalidArgumentException à la fin de votre implémentation. En d'autres termes, cette méthode ne doit pas revenir normalement ; elle doit toujours entraîner l'émission d'une exception.