Подтвердить что ты не робот

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

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

textFieldX.text = nil

или

textFieldX.text = @"";

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

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

4b9b3361

Ответ 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 = @""; 

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