对于一个IBOutlet UITextField
,就内存管理或其他原因而言,您如何清除文本值是否重要?
textFieldX.text = nil
或者
textFieldX.text = @"";
在objective-c中,可以接受给nil
对象发送消息并且@""
是静态的NSString *
。我不确定是否每个都@""
指向内存中的同一个对象,或者它是否分配了一堆 1 字节空终止字符串。
没什么大不了的,只是想我会问社区。谢谢。
对于一个IBOutlet UITextField
,就内存管理或其他原因而言,您如何清除文本值是否重要?
textFieldX.text = nil
或者
textFieldX.text = @"";
在objective-c中,可以接受给nil
对象发送消息并且@""
是静态的NSString *
。我不确定是否每个都@""
指向内存中的同一个对象,或者它是否分配了一堆 1 字节空终止字符串。
没什么大不了的,只是想我会问社区。谢谢。
就我个人而言,我认为这里的内存使用较少,而更多的是代码可维护性。
对我来说,标签总是有一个字符串是有道理的。将来有人可能会尝试附加标签值,将其保存在数据库中,将其包装在 xml 中等。在这种情况下,一个空的 NSString 对我来说比 0x0 更有意义。
我通常textFieldX.text = @"";
只是为了清楚起见。这有助于我记住该值应该是一个字符串,并且我可以将它传递给所有标准的字符串方法。
我推荐你使用nil,因为我发现当你使用@""的时候,占位符没有居中对齐(如果一定要对齐的话)。看,我如何更改代码以正确对齐占位符。
wordTextField.textAlignment = UITextAlignmentCenter;
//wordTextField.text = @"";
wordTextField.text = nil;
translationTextField.textAlignment = UITextAlignmentCenter;
//translationTextField.text = @"";
translationTextField.text = nil;
字符串总是在 Objective-C 中复制,所以第二个选项很可能是创建另一个字符串,然后指向它。这样一来,我认为你是对的。
为了扮演魔鬼的拥护者,我假设编译器优化选项 B 以执行类似于选项 A 的操作。就个人而言,我总是会选择选项 B,因为就您想要完成的最终操作而言,它更具可读性。
更新:我没有找到以不同方式实现您的目标的方法,但您可能对此花絮感兴趣(来自Apple UITextField Docs):
清除按钮模式
控制标准清除按钮何时出现在文本字段中。
@property(nonatomic) UITextFieldViewMode clearButtonMode
讨论
标准清除按钮显示在文本字段的右侧,作为用户快速删除文本的一种方式。此按钮会根据为此属性设置的值自动显示。
此属性的默认值为 UITextFieldViewModeNever。
我认为这将允许您为用户设置功能以清除文本字段。
我发现 usingtextField.text = nil;
对我的项目有不良影响。我正在构建一个计算器。
使用上述代码时,按清除按钮后,屏幕上不会出现按数字。
textField.text = @"";
对我有用。