对于IBOutlet UITextField
,就内存管理或其他原因而言,如何清除文本值是否重要?
textFieldX.text = nil
或
textFieldX.text = @"";
在objective-c中,可以向nil
对象发送消息,@""
是静态NSString *
。我不确定每个@""
是否指向内存中的同一个对象,或者它是否分配了一堆1字节的空终止字符串。
没什么大不了的,只是想我会问社区。感谢。
答案 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 = @"";
对我有用。