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.

27
demandé sur Brenden 2009-07-23 02:35:11

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.

32
répondu Brad The App Guy 2009-07-22 22:40:22

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.

8
répondu Dan Lorenc 2014-01-14 14:58:15

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;
3
répondu wzbozon 2011-07-05 12:01:39

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.

2
répondu TahoeWolverine 2009-07-22 22:46:11

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.

0
répondu Tander 2012-10-11 07:20:31