8
votes

Quelle est la "valeur détruite" dans "l'opérande gauche de" / "est une valeur déchets" Avertissement généré par "Construire et analyser"?

Lorsque je "construire et analyser" ce code dans Xcode, je reçois un avertissement que je ne comprends pas. Voici la méthode avec le problème: xxx pré>

Voici l'avertissement: P>

 warning: The left operand of '/' is a garbage value
         CGPoint relativePosition = CGPointMake(1.0-(location.x / self.bounds.size.width),location.y / self.bounds.size.height);
                                                     ~~~~~~~~~~ ^
1 warning generated.


1 commentaires

S'il vous plaît coller une image montrant comment les flèches pointent là-bas.


3 Réponses :


6
votes

Il est difficile de dire sans voir toute la fonction, mais je prendrais cela pour dire qu'il existe un chemin d'accès au code de l'emplacement.x n'est jamais initialisé. Il se peut que le code ne prend jamais ce chemin dans vos tests, mais la possibilité est là.

Edit: Je vais prendre une femme sauvage ici et dire que c'est parce que [touche Touchs AnyObject] pourrait éventuellement retourner nil . Dans quel cas [touche emplacementInview: auto] retournera les ordures (rappelez-vous d'envoyer des messages à nil est parfaitement valide).

Essayez de faire le reste de la fonction conditionnelle sur (toucher! = nil) .


2 commentaires

Je pensais dans les mêmes lignes. Qu'est-ce que le toucher défini comme?


J'ai élargi pour montrer toute la méthode. Pourrait-il être quelque chose à voir avec l'utilisation de [touche Touch Ownobject]?



0
votes

Si Touch est nul, [Touch EmplacementIview:] retournera le résultat de la structure NIL, qui, avant qu'une version de LLVM ne garantit que la première [taille du pointeur] octets de la structure est mise à zéro et que le reste serait toujours ordures.

afaik [touche AnyObject] ne peut jamais être nul et l'avertissement est un faux positif.


0 commentaires

1
votes

L'opérande gauche de '/' est une valeur détruite, cela suggère de nous dire que cela doit donner une valeur initiale à l'emplacement.x, car [Touch EmplacementInview: auto] Peut-être que NIL doit donc faire un jugement si le SI (Touch ! = Nil)


0 commentaires