【问题标题】:Does XCode creates one object for all empty strings?XCode 是否为所有空字符串创建一个对象?
【发布时间】:2011-01-14 16:55:42
【问题描述】:

我注意到所有 @"" 对象在执行时都会创建一个引用。

NSString *s1=@"";
NSString *s2=@"";

在此示例中,s1 等于 s2。

@"" 在所有情况下都会创建一个指针,每次我使用它时?

我可以依靠这个特性来比较objective-c中的字符串吗?

或者简单地说,如果我想确保我的字符串为空,我可以使用这个语句吗:

 if(s == @""){
 //do something
 }

【问题讨论】:

  • 不能保证两个空字符串实际上会指向内存中的相同位置。这是一个可以关闭的编译器优化。

标签: iphone nsstring


【解决方案1】:

是的,Objective C 在编译器中进行了优化,只需将所有等效的字符串文字指向内存中的相同字符串,以避免分配不必要的资源。此功能是可靠的,但有可能不会像 Objective C 语言规范中所记录的那样总是发生。

【讨论】:

  • 我也同意 Jesse 你应该使用 isEqualToString
【解决方案2】:

你应该使用

if([s isEqualToString:@""])

【讨论】:

  • 是的,我知道我应该使用它。但是如果 @"" 为每个空字符串创建一个指针 - 这意味着我可以使用 if(s==@"")
  • @Krio:我说得很含糊,但我试图暗示最好不要指望那个单指针引用总是如此,内存可能会被重新分配等等。
猜你喜欢
  • 2018-04-27
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 2015-10-14
  • 1970-01-01
  • 2016-05-25
  • 2023-03-14
  • 2018-05-04
相关资源
最近更新 更多