2009-07-22 25 views
27

W przypadku IBOutlet UITextField, czy ma to znaczenie w zakresie zarządzania pamięcią lub z innych powodów, w jaki sposób usuwa się wartość tekstową?Najlepszy sposób na wyczyszczenie UITextField

textFieldX.text = nil 

lub

textFieldX.text = @""; 

w celu C dopuszczalne jest komunikatu, nil przedmiot i @"" jest statycznym NSString *. Nie jestem pewien, czy każdy @"" wskazuje na ten sam obiekt w pamięci lub przydziela wiązkę 1-bajtowych zakończonych znakami null.

Nic wielkiego, pomyślałem, że zapytam społeczność. Dzięki.

Odpowiedz

32

Osobiście mniej myślę o używaniu pamięci, a tym bardziej o możliwościach konserwacji kodu.

Dla mnie ma sens, że etykieta ma zawsze ciąg. W przyszłości ktoś może spróbować dodać wartość etykiety, zapisać ją w bazie danych, zawinąć w xml itp. Pusty NSString w tym przypadku ma dla mnie dużo więcej sensu niż 0x0.

+0

Wszystkie odpowiedzi są świetne, dzięki. Jest to jednak dobry punkt. Spójność kodu. Dziękuje wszystkim. – Brenden

2

Ciągi zawsze są kopiowane w Objective-C, więc druga opcja najprawdopodobniej tworzy kolejny ciąg, a następnie wskazuje na niego. W ten sposób myślę, że masz rację.

Aby grać rolę adwokata diabła, zakładam, że kompilator optymalizuje opcję B, aby wykonać coś takiego jak opcja A. Osobiście zawsze brałbym opcję B, ponieważ jest bardziej czytelna, jeśli chodzi o operację końcową, którą chcesz wykonać.

UPDATE: Nie mogę znaleźć sposób, aby osiągnąć swój cel w różny sposób, ale może być zainteresowany w tym smakołyk (od Apple UITextField Docs):

clearButtonMode

Kontrole gdy średnia jasne przycisk pojawia się w polu tekstowym.

@property (nonatomic) UITextFieldViewMode clearButtonMode

Dyskusja

Standardowa jasne przycisk jest wyświetlany po prawej stronie pola tekstowego jako sposób, aby użytkownik mógł szybko usunąć tekst . Ten przycisk pojawia się automatycznie na podstawie wartości zestawu dla tej właściwości.

Domyślną wartością tej właściwości jest UITextFieldViewModeNever.

Wydaje mi się, że pozwoliłoby to na skonfigurowanie funkcji usuwania pola tekstowego przez użytkownika.

+0

Mówię więcej, aby programowo wyczyścić tekst w viewWillAppear do edycji obiektów, jeśli ma to sens. – Brenden

8

Zwykle robię textFieldX.text = @""; tylko dla jasności. Pomaga mi to pamiętać, że wartość powinna być łańcuchem i że mogę przekazać wszystkie standardowe metody łańcuchowe.

+0

Czy to powoduje, że ciąg znaków zastępczych pojawia się ponownie? – Supertecnoboff

+1

Potwierdzam, że tak, @Supertecnoboff – vichle

3

Polecam użyć zero, ponieważ odkryłem, że gdy używasz @ "", symbol zastępczy nie jest wyrównany w środku (jeśli musi być wyrównany). Zobacz, jak zmieniłem kod, aby poprawnie dopasować symbol zastępczy.

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

uważam, że za pomocą textField.text = nil; ma niepożądany wpływ na moim projekcie. Buduję kalkulator.

Po użyciu powyższego kodu, po naciśnięciu przycisku kasowania naciśnięcie cyfry nie pojawia się na ekranie.

textField.text = @""; 

działa dobrze dla mnie.

Powiązane problemy