2011-01-14 5 views
2

Ich habe festgestellt, dass alle @ "" Objekte eine Referenz für alle Zeiten erstellen, in denen sie ausgeführt wird.Erstellt XCode ein Objekt für alle leeren Strings?

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

In diesem Beispiel ist s1 gleich s2.

@ "" erstellt in jedem Fall einen Zeiger, jedes Mal wenn ich ihn benutze?

Kann ich diese Funktion beim Vergleichen von Strings in objective-c verwenden?

Oder einfach, kann ich mit dieser Aussage, wenn ich versichern möchte, dass meine String leer ist:

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

Es gibt keine Garantie, dass zwei leere Zeichenfolgen tatsächlich auf den gleichen Speicherort im Speicher verweisen. Es ist eine Compiler-Optimierung, die ausgeschaltet werden kann. – bbum

Antwort

4

Ja Objective C hat in der Compiler eine Optimierung verwenden sollten Das verweist alle äquivalenten Zeichenfolgenliterale einfach auf die gleiche Zeichenfolge im Speicher, um die Zuweisung unnötiger Ressourcen zu vermeiden. Diese Funktion ist zwar zuverlässig, aber es besteht die Möglichkeit, dass dies nicht immer der Fall ist, wie in den Sprachspezifikationen für Objective C dokumentiert.

+0

Ich stimme auch mit Jesse überein, dass Sie isEqualToString verwenden sollten –

+0

Danke, es ist nützlich! –

2

Sie

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

Ja, ich weiß, dass ich es verwenden sollte. ABER wenn @ "" einen Zeiger auf jeden emppty String erzeugt, bedeutet das, dass ich if verwenden kann (s == @ "") –

+0

@Krio: Ich war ziemlich zweideutig, aber ich versuchte zu unterstellen, dass es wahrscheinlich am besten ist, nicht darauf zu zählen dieser einzelne Verweis ist immer der Fall, Speicher kann neu zugewiesen werden usw. –

+0

Danke, nützliche Antwort! –

Verwandte Themen