2011-01-14 100 views
2

我注意到所有@“”对象在它执行的所有时间都创建一个引用。XCode是否为所有空字符串创建一个对象?

NSString *[email protected]""; 
NSString *[email protected]""; 

在本示例中,s1等于s2。

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

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

或者简单地说,我可以用这个说法,如果我想确保我的字符串是空的:

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

不能保证两个空字符串实际上会指向内存中的相同位置。这是一个可以关闭的编译器优化。 – bbum 2011-01-14 19:14:07

回答

4

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

2

你应该使用

if([s isEqualToString:@""]) 
+0

是的,我知道我应该使用它。但是如果@“”为每个emppty字符串创建一个指针 - 这意味着我可以使用if(s == @“”) – 2011-01-14 16:58:28

+0

@Krio:我很模糊,但我试图暗示它最好不要指望单个指针引用总是如此,内存可能会重新分配等。 – 2011-01-14 17:01:29

相关问题