Най-добрият начин за изчистване на UITextField

За IBOutlet UITextField има ли значение по отношение на управлението на паметта или други причини как изчиствате текстовата стойност?

textFieldX.text = nil

or

textFieldX.text = @"";

В object-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

Препоръчвам ви да използвате нула, защото открих, че когато използвате @"", контейнерът не е подравнен в центъра (ако трябва да бъде подравнен). Вижте как промених кода си, за да подравня правилно контейнера.

 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