【问题标题】:Best way to clear a UITextField清除 UITextField 的最佳方法
【发布时间】:2010-11-13 05:04:36
【问题描述】:

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

textFieldX.text = nil

或

textFieldX.text = @"";

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

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

【问题讨论】:

    标签: iphone objective-c memory-management uitextfield


    【解决方案1】:

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

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

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

    清除按钮模式

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

    @property(非原子) UITextFieldViewMode clearButtonMode

    讨论

    显示标准清除按钮 在文本字段的右侧 一种用户删除文本的方法 迅速地。出现此按钮 自动基于设置的值 对于这个属性。

    此属性的默认值为 UITextFieldViewModeNever。

    我认为这将允许您为用户设置清除文本字段的功能。

    【讨论】:

    • 我更倾向于在 viewWillAppear 上以编程方式清除文本以编辑对象,如果这有意义的话。
    【解决方案2】:

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

    【讨论】:

    • 这会使占位符字符串重新出现吗?
    • 我可以确认确实如此,@Supertecnoboff
    【解决方案3】:

    我个人认为这里的内存使用较少,而更多的是代码可维护性。

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

    【讨论】:

    • 所有回复都很好,谢谢。不过,这是一个很好的观点。代码一致性。谢谢大家。
    【解决方案4】:

    我推荐你使用nil,因为我发现当你使用@""的时候,占位符不是居中对齐的(如果一定要对齐的话)。看,我如何更改代码以正确对齐占位符。

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

    【讨论】:

      【解决方案5】:

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

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

      textField.text = @""; 
      

      对我有好处。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-15
        • 1970-01-01
        • 2018-01-16
        • 2015-10-10
        • 1970-01-01
        相关资源
        最近更新 更多