2009-07-22 9 views
27

Para un IBOutlet UITextField, ¿importa la administración de la memoria u otras razones de cómo borrar el valor del texto?La mejor manera de borrar un UITextField

textFieldX.text = nil 

o

textFieldX.text = @""; 

en Objective-c es aceptable mensaje un objeto nil y @"" es una estática NSString *. No estoy seguro de si cada @"" apunta al mismo objeto en la memoria o si asigna un grupo de cadenas terminadas nulas de 1 byte.

No es un gran problema, solo pensé en preguntarle a la comunidad. Gracias.

Respuesta

32

Personalmente, pensaría menos en el uso de memoria aquí y más en el mantenimiento del código.

Para mí, tiene sentido que una etiqueta siempre tenga una cadena. En el futuro, alguien podría tratar de anexar un valor de etiquetas, guardarlo en una base de datos, envolverlo en xml, etc. En este caso, un NSString vacío tiene mucho más sentido que un 0x0.

+0

Todas las respuestas son excelentes, gracias. Este es un buen punto aquí, sin embargo. Consistencia del código Gracias a todos. – Brenden

2

Las cadenas siempre se copian en Objective-C, por lo que la segunda opción probablemente sea crear otra cadena y luego señalarla. De esa manera, creo que tienes razón.

Para jugar al abogado del diablo, supongo que el compilador optimiza la opción B para hacer algo así como la opción A de todos modos. Personalmente, siempre haría la opción B porque es más legible en cuanto a la operación final que desea lograr.

ACTUALIZACIÓN: No he encontrado una manera de lograr su objetivo de manera diferente, pero usted puede estar interesado en este dato (de Apple UITextField Docs):

clearButtonMode

Controles clara cuando el botón norma aparece en el campo de texto.

@property (no atómica) UITextFieldViewMode clearButtonMode botón de limpieza

Discusión

El estándar se muestra en el lado derecho del campo de texto como una manera para que el usuario elimine el texto rápidamente. Este botón aparece automáticamente en función del valor establecido en para esta propiedad.

El valor predeterminado para esta propiedad es UITextFieldViewModeNever.

Creo que esto le permite configurar la funcionalidad para que el usuario borre el campo de texto.

+0

Estoy hablando más de borrar el texto mediante programación en viewWillAppear para editar objetos, si tiene sentido. – Brenden

8

Normalmente hago textFieldX.text = @""; solo por claridad. Esto me ayuda a recordar que el valor debe ser una cadena y que puedo pasarle todos los métodos de cadena estándar.

+0

¿Esto hace que reaparezca la cadena de marcador de posición? – Supertecnoboff

+1

Puedo confirmar que sí, @Supertecnoboff – vichle

3

Te recomiendo que uses nil, porque descubrí que cuando usas @ "", el marcador de posición no está alineado en el centro (si debe estar alineado). Mira, cómo cambié mi código para alinear correctamente el marcador de posición.

wordTextField.textAlignment = UITextAlignmentCenter; 
//wordTextField.text = @""; 
wordTextField.text = nil; 
translationTextField.textAlignment = UITextAlignmentCenter; 
//translationTextField.text = @""; 
translationTextField.text = nil; 
0

Me parece que el uso textField.text = nil; tiene un efecto indeseable sobre mi proyecto. Estoy construyendo una calculadora.

Al usar el código anterior, después de presionar el botón borrar, al presionar un dígito no aparece en la pantalla.

textField.text = @""; 

funciona bien para mí.

Cuestiones relacionadas