J'ai un appel comme celui-ci [Méthode de classe] et un avertissement disant que la classe ne peut pas répondre au message "méthode". Le message "method" n'existe pas mais mon code utilise un message inconnu en attrapant (en utilisant forwardingTargetForSelector) afin qu'il fonctionne bien et qu'il soit compilé pour fonctionner de cette façon. Comment puis-je cacher cet avertissement ennuyeux?Comment désactiver l'avertissement dans xcode sur une ligne spécifique?
12
A
Répondre
16
Si vous avez l'intention d'envoyer un éventuellement-inappliquées message à un objet, et vous savez que vous allez attraper les échecs, vous devez utiliser l'invocation:
id myClone = [anObject performSelector:@selector(copy)];
qui déclare votre intention plus directement que vous appelez une méthode qui peut ne pas exister, et vous êtes cool avec ça. C'est une façon plus claire de le faire que de supprimer l'avertissement ou de falsifier la méthode.
3
Vous pouvez définir une catégorie qui déclare cette méthode. Avoir la définition dans la portée au moment de la compilation permettrait d'éviter l'avertissement. Quelque chose comme
@interface MyClass (ShutUpTheCompilerMethods)
- (void)method;
@end
...
[MyClass method] //no warning here
Merci. Je suppose que ce serait moins efficace si je devais créer un sélecteur à chaque appel. Sauf si je déclare tout mon @selector un et pour tous. – CodeFlakes
La différence de performance sera pratiquement indétectable. Si vous êtes inquiet, le profil. Ne pas optimiser prématurément. –
'performSelector' ne fonctionne que pour les méthodes dont les types d'arguments et le type de retour sont tous des objets; et qui n'a que 0, 1 ou 2 arguments – user102008