2009-08-19 11 views
85

Voglio confrontare il valore di uno NSString alla stringa "Sbagliato". Ecco il mio codice:È necessario assegnare una stringa a una variabile prima di confrontarla con un'altra?

NSString *wrongTxt = [[NSString alloc] initWithFormat:@"Wrong"]; 
if([statusString isEqualToString:wrongTxt]){ 
    doSomething; 
} 

Devo davvero creare un NSString per "sbagliato"?

Inoltre, è possibile confrontare il valore di text di UILabel in una stringa senza assegnare il valore dell'etichetta a una stringa?

+0

Tra l'altro, si sta sprecando tempo con initWithFormat, è possibile modificare NSString * wrongTxt = [[NSString alloc] initWithFormat: @ "Wrong"]; a NSString * wrongTxt = @ "Wrong"; Dimentica solo con initWithFormat se hai intenzione di provare a calcolare una stringa da altri input, ad es. NSString * wrongTxt = [[NSString alloc] initWithFormat: @ "% @ era sbagliato% d volte", craigString, wrongCount]; – Craig

risposta

178

Devo davvero di creare un NSString per "sbagliato"?

No, perché non basta fare:

if([statusString isEqualToString:@"Wrong"]){ 
    //doSomething; 
} 

Utilizzando @"" crea semplicemente una stringa letterale, che è una valida NSString.

Inoltre, è possibile confrontare il valore di un UILabel.text in una stringa senza assegnare il valore dell'etichetta a una stringa?

Sì, si può fare qualcosa di simile:

UILabel *label = ...; 
if([someString isEqualToString:label.text]) { 
    // Do stuff here 
} 
+0

Questo funziona. Immagino di avere solo un codice buggato. Prima stava lanciando un'eccezione. – Bryan

+1

Elaborare: label.text * IS * una stringa, quindi ovviamente non è necessario creare una stringa per il confronto. – Amagrammer

26
if ([statusString isEqualToString:@"Wrong"]) { 
    // do something 
} 
+0

Grazie wevah. Perspx era 1 secondo più veloce. – Bryan

8

Brian, anche la pena di gettare qui - gli altri sono ovviamente corretto che non è necessario dichiarare una variabile stringa. Tuttavia, la prossima volta che si desidera dichiarare una stringa che non è necessario effettuare le seguenti operazioni:

NSString *myString = [[NSString alloc] initWithFormat:@"SomeText"]; 

Anche se il lavoro di cui sopra fa, fornisce una variabile NSString trattenuta che sarà quindi necessario rilasciare in modo esplicito dopo aver' ho finito di usarlo.

La prossima volta che si desidera una variabile stringa è possibile utilizzare il simbolo "@" in un modo molto più conveniente:

NSString *myString = @"SomeText"; 

Questo sarà autoreleased quando hai finito con esso in modo eviterete di memoria perdite anche ...

Speranza che aiuta!

+0

Mi stavo chiedendo.Vedo spesso variabili stringa che sono oggetti oggettivi, ma non vengono mai rilasciati. Grazie! – Bryan

+2

Il suggerimento è nel bit "alloc". Se si utilizza un Alloc (o una copia), è necessario rilasciarlo in modo specifico. In caso contrario, la convenzione prevede che l'oggetto sia già impostato su autorelease. – h4xxr

+0

Sì, sebbene possa contenere 'new' o' copy' ad esempio 'newObject' (da' NSDictionaryController') o 'mutableCopy' (da' NSObject') http://developer.apple.com/documentation/Cocoa/Conceptual /MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc/uid/20000043-SW1 –

2

È inoltre possibile utilizzare i metodi della classe NSString che sarà anche creare un'istanza autoreleased e hanno più opzioni come formattazione di stringhe:

NSString *myString = [NSString stringWithString:@"abc"]; 
NSString *myString = [NSString stringWithFormat:@"abc %d efg", 42]; 
Problemi correlati