Je reçois un avertissement
performalector peut provoquer une fuite car son sélecteur est inconnu p> blockQuote>
dans le code: strong> p>
xxx pré>
en-tête: strong> p> xxx PRE> P>
5 Réponses :
Il s'agit d'un avertissement généré par le compilateur car -wundeclared-sélecteur a été utilisé lors de la compilation et du comptage automatique de référence (ARC) est activé. Cela peut être, en général, ignoré en toute sécurité, car il est évident que le sélecteur de la variable nommé «sélecteur» est inconnu au moment de la compilation, car elle aura sa valeur attribuée au moment de l'exécution. P>
Merci mais dans mon application, il renvoie le NSLog; Méthode manquée. C'est faux
Cela signifie que l'objet ne met pas en œuvre cette méthode (ne répond donc pas au sélecteur spécifié). Il ne provoque pas une fuite de mémoire alors, car si la branche "autre" de la structure IF est atteinte, la méthode - [Delegeta PerfactSelector] n'a pas été invoquée, elle ne pouvait donc pas conserver l'objet, donc aucune fuite de mémoire.
Vous souvenez-vous de mettre un colon derrière le sélecteur pour chaque argument? Le sélecteur pour - (void) MéthodeWithObject: (ID) arg1; code> est en fait
@selector (méthodewithObject :) code>. Le côlon en fait partie.
"Cela peut être, en général, ignoré en toute sécurité ..." Sauf si le sélecteur commence par nouveau code>,
alloc code>,
retenir code>,
Copier code> ou
mutablecopy code>
Votre Si ... RéponseSelector: sélecteur code> ne fonctionnera pas car votre sélecteur code> code> est juste le nom de la méthode. Pour votre cas, vous devez vérifier
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[self performSelector:nextView];
#pragma clang diagnostic pop
Ignorer sélectivement l'avertissement est super pratique. Merci.
J'ai compris qu'il suffit d'utiliser #pragma clang diagnostique ignoré "-warc-parsSelector-fuites" code> au début de la mise en œuvre de la classe.
@ Julian Mais alors vous ne savez pas s'il y a une vraie question ailleurs dans votre implémentation de classe. D'autre part, vous pouvez désactiver l'alerte mondial dans vos paramètres de construction si cela ne vous dérange pas ...
Vous pouvez également utiliser objc_msgsend au lieu de PerfactSelector, comme décrit ici . p>
Pourquoi Overkill? C'est juste une autre façon de faire la même chose, n'est-ce pas?
Vous pouvez ajouter Avertissement_cflags code> dans les paramètres de construction code> code>.
p>
La voie la plus simple consiste à ajouter cette macro à votre fichier PCH. Ou fichier .m ..
duplicaté possible de spectacleSelector peut provoquer une fuite car son sélecteur est Inconnu
Je pense que ce Bon post expliquer le problème Très bien! Puisse-t-il être utile!