清除UITextField的最佳方法

时间:2009-07-22 22:35:12

标签: iphone objective-c memory-management uitextfield

对于IBOutlet UITextField,就内存管理或其他原因而言,如何清除文本值是否重要?

textFieldX.text = nil

textFieldX.text = @"";

在objective-c中,可以向nil对象发送消息,@""是静态NSString *。我不确定每个@""是否指向内存中的同一个对象,或者它是否分配了一堆1字节的空终止字符串。

没什么大不了的,只是想我会问社区。感谢。

5 个答案:

答案 0 :(得分:33)

就我个人而言,我会更少考虑这里的内存使用情况,更多地考虑代码可维护性。

对我来说,标签总是有字符串是有道理的。将来,有人可能会尝试附加标签值,将其保存在数据库中,将其包装在xml中等等。在这种情况下,空的NSString对我来说更有意义,即0x0。

答案 1 :(得分:8)

为了清楚起见,我通常会textFieldX.text = @"";。这有助于我记住,值应该是一个字符串,并且我可以将它传递给所有标准字符串方法。

答案 2 :(得分:3)

我建议你使用nil,因为我发现当你使用@“”时,占位符没有在中心对齐(如果它必须对齐)。看,我是如何更改代码以使占位符正确对齐的。

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

答案 3 :(得分:2)

字符串总是在Objective-C中复制,因此第二个选项很可能是创建另一个字符串,然后指向它。这样,我认为你是对的。

为了扮演魔鬼的拥护者,我会假设编译器优化选项B以执行类似选项A的操作。就个人而言,我总是会做选项B,因为就你想要完成的最终操作而言,它更具可读性。

更新:我找不到以不同方式实现目标的方法,但您可能对这个花絮感兴趣(来自Apple UITextField Docs):

  

clearButtonMode

     

控制标准何时清除   按钮出现在文本字段中。

     

@属性(非原子)   UITextFieldViewMode clearButtonMode

     

讨论

     

显示标准清除按钮   在文本字段的右侧为   用户删除文本的方法   很快。出现此按钮   自动根据值设置   这个属性。

     

此属性的默认值为   UITextFieldViewModeNever。

我认为这可以让您为用户设置清除文本字段的功能。

答案 4 :(得分:0)

我发现使用textField.text = nil;会对我的项目产生不良影响。我正在建造一个计算器。

使用上述代码时,按下清除按钮后,屏幕上不会显示数字。

textField.text = @""; 

对我有用。