【问题标题】:What is the value of the string @""?字符串@"" 的值是多少?
【发布时间】:2011-05-18 21:34:45
【问题描述】:

我正在编写一个使用大量可编辑文本字段的 iPhone 应用程序。通过在线阅读各种参考资料,我学到了很多关于 UITextFields 和 NSStrings 的知识,但仍有一些细节让我难以理解。当用户为我的一个文本字段输入不正确的值时,我会抛出一条错误消息并将文本字段恢复为输入之前的状态。对于空文本字段,我一直在这样做:

theTextField.text = @"";

这是最好的方法吗?我只是自己想出了这个想法,我不知道它是否有任何问题(除了到目前为止它似乎工作得很好)。

另外,@"" 是否与 "nil" 字符串具有相同的值?换句话说,如果我将一个字符串设置为 @"" 然后调用它:

if (myString) {...}

语句会返回真还是假?

最后一件事。当一个 NSString 使用这个初始化时:

NSString *myString = [[NSString alloc] init];

该字符串的 Length 值是多少?

【问题讨论】:

    标签: objective-c string text nsstring uitextfield


    【解决方案1】:

    这里要理解的重要一点是,其中没有字符的NSString,例如@""[[NSString alloc] init] 仍然是一个有效对象。尼克所说的所有后果都由此而来。

    在 Objective-C 中,任何有效对象在布尔上下文中都是“真”;* nil 是唯一的假对象值。

    由于这些字符串是有效的对象,它们确实有长度,但因为它们不包含字符,所以长度为 0。

    将空字符串对象@"" 分配给另一个字符串指针(例如文本字段的text)没有问题。由于没有字符的字符串仍然是一个有效的NSString 对象,这与分配一个 确实 恰好有字符的字符串完全相同。


    *与 Python 或 Perl 等所谓的“脚本”语言不同,其中空字符串或集合的计算结果为布尔值 false。

    【讨论】:

    • 好吧,这就是我想要弄清楚的——空字符串和零字符串之间的区别就像 0 和 null 之间的区别。
    • @Poaters:不完全——在 C 和 ObjC 中,ONULL 是等价的。如果您使用过 Python,nilNone 的含义非常接近,尽管没有效果。我认为undef是Perl中对应的实体。
    【解决方案2】:

    使用

    theTextField.text = @"";
    

    绝对没问题。应该没有问题。

    if (@"")
    

    将评估为真。 @"" 不等于 nil。

    长度

    NSString *myString = [[NSString alloc] init];
    

    是 0。

    【讨论】:

    • @"" 与任何其他 NSString 文字一样,是 NSString 的常量实例。它有自己的内存空间,在其中度过应用程序的生命周期,并且不会自动释放。 (另外,这是一个非常迂腐的评论。)
    • @BoltClock,不,这不是迂腐,谢谢。我会更新我的答案。
    • 谢谢,了解这些对您很有帮助!
    【解决方案3】:

    这不是问题的答案,但可能是您尝试做的事情的答案。 如果您想知道是否必须编写 if(str && str.length) 来覆盖 nil 和空字符串,您不需要。你可以只使用if(str.length),因为在Objective-C中,到nil的未知消息将返回nil(所以[a.b.c.d.e.f doStuff]将是nil,如果链中的任何一个值是nil)。因此,很少需要特定的无效性检查,除非您想要准确地确定无效性。

    【讨论】:

      【解决方案4】:

      检查NSString+ string

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多