2009-07-22 51 views
27

對於IBOutlet UITextField,至於內存管理或其他原因,您是如何清除文本值的?清除UITextField的最佳方法

textFieldX.text = nil 

textFieldX.text = @""; 

在Objective-C是可以接受的消息的nil對象和@""是一個靜態NSString *。我不確定每個@""是否指向內存中的同一個對象,或者是否分配了一堆1字節的以null結尾的字符串。

沒什麼大不了的,只是想我會問社區。謝謝。

回答

32

就我個人而言,我會考慮更少的內存使用情況,以及更多關於代碼可維護性的內容。

對我來說,它是有道理的,標籤總是有一個字符串。將來有人可能會嘗試添加標籤值,將其保存在數據庫中,將其包裝在xml中等。在這種情況下,一個空的NSString對我來說更有意義,即0x0。

2

字符串總是複製到Objective-C中,所以第二個選項很可能是創建另一個字符串,然後指向它。那樣,我認爲你是對的。爲了扮演魔鬼的擁護者,我會假設編譯器優化了選項B來做選項A之類的事情。就我個人而言,我總是會選擇B,因爲它的可讀性更高,只要您想完成的最終操作。

更新:我沒有找到一個方法來完成不同的目標,但你可能有興趣在這個珍聞(從Apple UITextField Docs):

clearButtonMode

控制在標準明確 按鈕出現在文本字段中。

@屬性(非原子) UITextFieldViewMode clearButtonMode

討論

標準清除按鈕被顯示在 文本字段的右側作爲 一種方式,用戶能夠快速除去文本 。此按鈕會根據此屬性的值集 自動出現 。

此屬性的默認值爲 UITextFieldViewModeNever。

我認爲這將允許您設置用戶清除文本字段的功能。

+0

我說的更多的方法是在viewWillAppear上以編程方式清除文本以編輯對象,如果有意義的話。 – Brenden 2009-07-22 22:58:33

8

爲了清楚起見,我通常會做textFieldX.text = @"";。這有助於我記住值應該是一個字符串,並且我可以將它傳遞給所有標準字符串方法。

+0

這是否使佔位符字符串重新出現? – Supertecnoboff 2015-08-23 15:16:08

+1

我可以確認它,@Supertecnoboff – vichle 2015-10-21 14:08:51

3

我建議你使用nil,因爲我發現當你使用@「」時,佔位符不在中心對齊(如果它必須對齊)。看,我如何更改我的代碼以正確地佔用佔位符。

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

我發現使用textField.text = nil;對我的項目有不良影響。我正在建立一個計算器。

使用上述代碼時,按下清除按鈕後,按下數字不會出現在屏幕上。

textField.text = @""; 

適合我。

相關問題