Лучший способ очистить UITextField

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

textFieldX.text = nil

or

textFieldX.text = @"";

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

Ничего страшного, просто решил спросить сообщество. Спасибо.


person Brenden    schedule 22.07.2009    source источник


Ответы (5)


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

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

person Brad The App Guy    schedule 22.07.2009
comment
Все ответы отличные, спасибо. Однако это хороший момент. Согласованность кода. Спасибо всем. - person Brenden; 23.07.2009

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

person Dan Lorenc    schedule 22.07.2009
comment
Это приводит к тому, что строка заполнителя появляется снова? - person Supertecnoboff; 23.08.2015
comment
Я могу подтвердить, что да, @Supertecnoboff - person vichle; 21.10.2015

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

 wordTextField.textAlignment = UITextAlignmentCenter;
 //wordTextField.text = @"";
 wordTextField.text = nil;
 translationTextField.textAlignment = UITextAlignmentCenter;
 //translationTextField.text = @"";
 translationTextField.text = nil;
person Denis Kutlubaev    schedule 05.07.2011

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

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

ОБНОВЛЕНИЕ: я не нашел способа достичь вашей цели по-другому, но вам может быть интересен этот лакомый кусочек (от Apple UITextField Docs):

ClearButtonMode

Управляет появлением стандартной кнопки очистки в текстовом поле.

@property(nonatomic) UITextFieldViewMode clearButtonMode

Обсуждение

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

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

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

person TahoeWolverine    schedule 22.07.2009
comment
Я больше говорю о программной очистке текста в viewWillAppear для редактирования объектов, если это имеет смысл. - person Brenden; 23.07.2009

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

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

textField.text = @""; 

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

person Tander    schedule 11.07.2012