2011-01-14 103 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

相關問題