9
votes

Effecselector Avertissement

Je reçois un avertissement

performalector peut provoquer une fuite car son sélecteur est inconnu

dans le code: xxx

en-tête: xxx


2 commentaires

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!


5 Réponses :


4
votes

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.


4 commentaires

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; est en fait @selector (méthodewithObject :) . 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 , alloc , retenir , Copier ou mutablecopy



43
votes

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


3 commentaires

Ignorer sélectivement l'avertissement est super pratique. Merci.


J'ai compris qu'il suffit d'utiliser #pragma clang diagnostique ignoré "-warc-parsSelector-fuites" 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 ...



3
votes

Vous pouvez également utiliser objc_msgsend au lieu de PerfactSelector, comme décrit ici .


1 commentaires

Pourquoi Overkill? C'est juste une autre façon de faire la même chose, n'est-ce pas?



3
votes

Vous pouvez ajouter -wno-arc-parselector-fuites pour Avertissement_cflags dans les paramètres de construction . Entrez la description de l'image ici

trouvé la solution ici


0 commentaires

0
votes

La voie la plus simple consiste à ajouter cette macro à votre fichier PCH. Ou fichier .m .. xxx


0 commentaires