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