2009-07-22 4 views
27

Что касается IBOutlet UITextField, имеет значение, насколько управление памятью или другие причины, как вы очищаете текстовое значение?Лучший способ очистить UITextField

textFieldX.text = nil 

или

textFieldX.text = @""; 

В Objective-C это приемлемо для сообщения обязательно nil объектом и @"" является статическим NSString *. Я не уверен, что каждый @"" указывает на один и тот же объект в памяти или выделяет пучок строк с нулевым завершением в 1 байт.

Неважно, просто подумал, что я попрошу сообщество. Благодарю.

ответ

32

Лично я думал бы меньше об использовании памяти здесь и многое другое о ремонте кода.

Для меня имеет смысл, что метка всегда имеет строку. В будущем кто-то может попытаться добавить значение меток, сохранить его в базе данных, обернуть его в xml и т. Д. Пустая NSString в этом случае имеет для меня гораздо больше смысла, чем 0x0.

+0

Все отзывы велики, спасибо. Это хороший момент. Консистенция кода. Спасибо всем. – Brenden

2

Строки всегда копируются в Objective-C, поэтому второй вариант, скорее всего, создает другую строку, а затем указывает на нее. Таким образом, я думаю, вы правы.

Чтобы играть адвоката дьявола, я бы предположил, что компилятор оптимизирует вариант B, чтобы делать что-то вроде варианта A в любом случае. Лично я всегда делал вариант B, потому что он более читабельен, чем конечная операция, которую вы хотите выполнить.

UPDATE: Я не нашел способ отпишусь по-разному, но вы можете быть заинтересованы в этом лакомый (с Apple UITextField Docs):

clearButtonMode

управления, когда стандарт ясно кнопка появляется в текстовом поле.

@property (неатомической) UITextFieldViewMode clearButtonMode

Обсуждение

Стандартная кнопка ясно отображается в правой части текстового поля способ для пользователя, чтобы удалить текст быстро. Эта кнопка отображается автоматически на основе значения для этого свойства.

Значением по умолчанию для этого свойства является UITextFieldViewModeNever.

Я думаю, что это позволит вам настроить функциональность для пользователя, чтобы очистить текстовое поле.

+0

Я говорю больше об очищении текста программно на viewWillAppear для редактирования объектов, если это имеет смысл. – Brenden

8

Я обычно делаю textFieldX.text = @""; только для наглядности. Это помогает мне помнить, что значение должно быть строкой и что я могу передать все стандартные стандартные методы.

+0

Получает ли это повторную замену строки-заполнителя? – Supertecnoboff

+1

Я могу подтвердить, что это так, @Supertecnoboff – vichle

3

Я рекомендую использовать ноль, потому что я обнаружил, что при использовании @ "" заполнитель не выровнен по центру (если он должен быть выровнен). Посмотрите, как я изменил свой код, чтобы правильно установить выравниватель.

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

Я считаю, что использование textField.text = nil; имеет нежелательный эффект на моем проекте. Я строю калькулятор.

При использовании вышеуказанного кода после нажатия кнопки очистки, нажатие цифры не появляется на экране.

textField.text = @""; 

работает хорошо для меня.

Смежные вопросы