Objective c “字符串”的值是多少&引用;?

Objective c “字符串”的值是多少&引用;?,objective-c,string,text,nsstring,uitextfield,Objective C,String,Text,Nsstring,Uitextfield,我正在编写一个iPhone应用程序,它使用了很多可编辑的文本字段。通过在线阅读各种参考资料,我已经了解了很多关于UITextFields和nsstring的知识,但仍有一些细节让我难以理解。当用户为我的一个文本字段输入了不正确的值时,我会抛出一条错误消息,并将文本字段恢复到输入前的状态。对于空文本字段,我一直在这样做: theTextField.text = @""; 这是最好的方法吗?我只是自己提出了这个想法,我不知道它是否有任何问题(除了到目前为止它似乎工作得很好这一事实) 此外,@“”是

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

theTextField.text = @"";
这是最好的方法吗?我只是自己提出了这个想法,我不知道它是否有任何问题(除了到目前为止它似乎工作得很好这一事实)

此外,@“”是否与“nil”字符串具有相同的值?换句话说,如果我将字符串设置为@“”,然后将其调用:

if (myString) {...}
这句话是真是假

最后一件事。使用以下命令初始化NSString时:

NSString *myString = [[NSString alloc] init];
该字符串的长度值是多少?

使用

theTextField.text = @"";
绝对可以。应该没有任何问题

if (@"")
将评估为真
@“
与nil不同

长度

NSString *myString = [[NSString alloc] init];
是0。

使用

theTextField.text = @"";
绝对可以。应该没有任何问题

if (@"")
将评估为真
@“
与nil不同

长度

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

是0。

这里要了解的重要一点是,一个没有字符的
NSString
,例如
@“
[[NSString alloc]init]
仍然是一个有效的对象。尼克所说的一切后果都来自于此

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

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

将空字符串对象
@“
分配给另一个字符串指针(例如文本字段的
文本)没有问题。由于没有字符的字符串仍然是有效的
NSString
对象,因此这与分配碰巧有字符的字符串完全相同



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

这里需要了解的重要一点是,没有字符的
NSString
,例如
@”“
[[NSString alloc]init]
仍然是有效的对象。尼克所说的一切后果都来自于此

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

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

将空字符串对象
@“
分配给另一个字符串指针(例如文本字段的
文本)没有问题。由于没有字符的字符串仍然是有效的
NSString
对象,因此这与分配碰巧有字符的字符串完全相同



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

Check
NSString

Check
NSString

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

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

@“
,与任何其他NSString文本一样,是NSString的一个常量实例。它有自己的内存空间,应用程序的生命周期都在其中,并且不会自动释放。(还有,这是一个非常迂腐的评论。)@BoltClock,不,这不是迂腐的,谢谢。我会更新我的答案。谢谢,这些将是非常有用的事情知道
@“
,与任何其他NSString文本一样,是NSString的常量实例。它有自己的内存空间,应用程序的生命周期都在其中,并且不会自动释放。(还有,这是一个非常迂腐的评论。)@BoltClock,不,这不是迂腐的,谢谢。我会更新我的答案。谢谢,这些将是非常有用的事情知道!好的,这就是我想弄明白的--空字符串和空字符串之间的区别就像0和null之间的区别。@Poaters:不完全是--在C和ObjC中,
O
null
是等价的。如果您使用过Python,
nil
None
在意义上非常接近,但没有效果。我认为
unde
是Perl中对应的实体。好吧,这就是我想弄清楚的——空字符串和nil字符串之间的区别就像0和null之间的区别一样。@Poaters:不完全是——在C和ObjC中,
O
null
是等价的。如果您使用过Python,
nil
None
在意义上非常接近,但没有效果。我想