2013-07-23 10 views
5

Mentre si lavora sul codice di progetto ha lasciato a me da un dev precedente, ho incontrato il seguente costruttoObjective C perché stringa di formato come stringa

-(NSString *)StringCheckWithString:(NSString *)string{ 

    NSString *string2 = [NSString stringWithFormat:@"%@", string]; 

    if([string2 length] == 0){ 
     return @"none"; 
    } 
    else { 
     return string2; 
    } 
} 

qualcuno può spiegare il motivo per cui si dovrebbe fare questo, sembra in modo significativo overengineered a io e io non capisco perché è stato fatto in questo modo (per chiarezza, non capisco perché la stringa è formattata in questo modo, comprendo il controllo della lunghezza)

+3

È possibile che "stringa" sia un input sconosciuto. Se contiene caratteri di formato e lo usi crudo, possono accadere COSE CATTIVE. – thegrinner

+2

@thegrinner sicuramente nel caso in cui 'stringa' contiene caratteri di formato,' stringa2' ora contiene anche quei caratteri? – James

+0

Sto cercando di comprendere la situazione in cui una NSString viene passata a un metodo NON È VERAMENTE un NSString. Qualcuno ha un esempio specifico su come raggiungere quella situazione? – Dan

risposta

8

L'argomento che è passato potrebbe essere qualsiasi sottoclasse di stringhe, incluso NSMutableString. Questo codice crea una copia immutabile di esso. Ciò significa che è possibile memorizzare la stringa restituita senza doversi preoccupare di qualcun altro che la modifica.

Un modo migliore di fare questo sarebbe:

NSString *string2 = [string copy]; 

Secondo il NSCopying Protocol reference:

La copia restituito è immutabile se la considerazione “immutabile vs. mutabile” si applica al ricevente oggetto.

+0

Mi piace questa risposta.Dall'esame dell'uso, dubito che sia stato l'intento, ma ha senso come un effetto desiderabile. – James

+8

'[stringa copia]' sembra essere più chiaro per me. – jszumski

+0

Sono d'accordo con @jszumski - se avessi intenzione di scrivere qualcosa con questo effetto, userei 'copia'. – Jasarien

Problemi correlati