Meilleure façon d'effacer un UITextField
Pour un IBOutlet UITextField
, est-ce important en ce qui concerne la gestion de la mémoire ou d'autres raisons pour lesquelles vous effacez la valeur du texte?
textFieldX.text = nil
Ou
textFieldX.text = @"";
Dans objective-c, il est acceptable d'envoyer un message à un objet nil
et @""
est un NSString *
statique. Je ne suis pas sûr si chaque @""
pointe sur le même objet en mémoire ou s'il alloue un tas de chaînes terminales null de 1 octet.
Pas grand chose, je pensais juste demander à la communauté. Grâce.
5 réponses
Personnellement, je penserais moins à l'utilisation de la mémoire ici et plus à la maintenabilité du code.
Pour moi, il est logique qu'une étiquette ait toujours une chaîne. Dans l'avenir, quelqu'un pourrait essayer d'ajouter un étiquettes de valeur, de l'enregistrer dans une base de données, l'envelopper dans du xml, etc. Un NSString vide dans ce cas a beaucoup plus de sens pour moi qu'un 0x0.
Je fais habituellement textFieldX.text = @"";
juste pour plus de clarté. Cela m'aide à me rappeler que la valeur doit être une chaîne, et que je peux lui transmettre toutes les méthodes de chaîne standard.
Je vous recommande d'utiliser néant, parce que j'ai découvert que lorsque vous utilisez"@"", l'espace réservé n'est pas aligné au centre(si il doit être aligné). Regardez, comment j'ai changé mon code pour que l'espace réservé soit aligné correctement.
wordTextField.textAlignment = UITextAlignmentCenter;
//wordTextField.text = @"";
wordTextField.text = nil;
translationTextField.textAlignment = UITextAlignmentCenter;
//translationTextField.text = @"";
translationTextField.text = nil;
Les chaînes copient toujours dans Objective-C, donc la deuxième option crée probablement une autre chaîne, puis pointe vers elle. De cette façon, je pense que vous avez raison.
Pour jouer devil's advocate, je suppose que le compilateur optimise l'option B Pour faire quelque chose comme l'option A de toute façon. Personnellement, je ferais toujours l'option B car elle est plus lisible en ce qui concerne l'opération finale que vous voulez accomplir.
UPDATE: Je n'ai pas trouvé un moyen d'atteindre votre objectif différemment, mais vous pouvez soyez intéressé par cette friandise (de Apple UITextField Docs):
ClearButtonMode
Contrôle lorsque la norme bouton apparaît dans le champ de texte.
@ property (nonatomic) UITextFieldViewMode clearButtonMode
Discussion
Le bouton Effacer standard s'affiche sur le côté droit du champ de texte comme un moyen pour l'utilisateur de supprimer le texte rapidement. Ce bouton s'affiche automatiquement en fonction de la valeur définie pour cette propriété.
La valeur par défaut de cette propriété est UITextFieldViewModeNever.
Je pense que cela vous permettrait de configurer la fonctionnalité pour que l'utilisateur efface le champ de texte.
Je trouve que l'utilisation de textField.text = nil;
est un effet indésirable sur mon projet. Je construis une calculatrice.
Lorsque vous utilisez le code ci-dessus, après avoir appuyé sur le bouton Effacer, en appuyant sur un chiffre ne s'affiche pas à l'écran.
textField.text = @"";
Fonctionne bien pour moi.