Лучший способ очистить UITextField
Что касается IBOutlet UITextField
, имеет ли значение управление памятью или другие причины, как вы очищаете текстовое значение?
textFieldX.text = nil
или
textFieldX.text = @"";
В objective-c допустимо сообщение a nil
object, а @""
- статический NSString *
. Я не уверен, что каждый @""
указывает на один и тот же объект в памяти или выделяет пучок строк с нулевым завершением в 1 байт.
Неважно, просто подумал, что я попрошу сообщество. Спасибо.
Ответы
Ответ 1
Лично я бы подумал меньше об использовании памяти здесь и более о ремонте кода.
Для меня имеет смысл, что метка всегда имеет строку. В будущем кто-то может попытаться добавить значение меток, сохранить его в базе данных, обернуть его в xml и т.д. Пустая NSString в этом случае имеет для меня гораздо больше смысла, что 0x0.
Ответ 2
Я обычно делаю textFieldX.text = @"";
только для ясности. Это помогает мне помнить, что значение должно быть строкой и что я могу передать все стандартные методы строк.
Ответ 3
Я рекомендую вам использовать nil, потому что я обнаружил, что при использовании @"" заполнитель не выравнивается по центру (если он должен быть выровнен). Посмотрите, как я изменил свой код, чтобы правильно установить выравниватель.
wordTextField.textAlignment = UITextAlignmentCenter;
//wordTextField.text = @"";
wordTextField.text = nil;
translationTextField.textAlignment = UITextAlignmentCenter;
//translationTextField.text = @"";
translationTextField.text = nil;
Ответ 4
Строки всегда копируются в Objective-C, поэтому второй вариант, скорее всего, создает другую строку, а затем указывает на нее. Таким образом, я думаю, что вы правы.
Чтобы играть в адвоката дьявола, я бы предположил, что компилятор оптимизирует вариант B, чтобы делать что-то вроде опции A в любом случае. Лично я всегда делал бы вариант B, потому что он был более читабельным до конечной операции, которую вы хотите выполнить.
UPDATE: я не нашел способ выполнить вашу задачу по-разному, но вам может быть интересен этот лакомый кусочек (от Apple UITextField Docs):
clearButtonMode
Управляет, когда стандартный появляется в текстовом поле.
@property (неатомический) UITextFieldViewMode clearButtonMode
Обсуждение
Отображается стандартная кнопка очистки в правой части текстового поля в виде способ для пользователя удалить текст быстро. Эта кнопка появляется автоматически на основе установленного значения для этого свойства.
Значение по умолчанию для этого свойства UITextFieldViewModeNever.
Я думаю, что это позволит вам настроить функциональность для пользователя, чтобы очистить текстовое поле.
Ответ 5
Я считаю, что использование textField.text = nil;
оказывает нежелательное влияние на мой проект. Я создаю калькулятор.
При использовании вышеуказанного кода после нажатия кнопки очистки, нажатие цифры не появляется на экране.
textField.text = @"";
работает хорошо для меня.