stringa -(void) changeString:(NSString*)string
è variabile locale, metodo per restituire valore di comando guarda il riferimento allo [NSString lowerCaseString]
method, puoi vedere che restituisce una nuova stringa, con i caratteri minuscoli:
Restituisce la rappresentazione in minuscolo del ricevitore.
- (NSString *)lowercaseString
Che il codice fa è semplicemente sovrascrivere il riferimento alla stringa di input con l'uscita della chiamata lowercaseString
, che non ha alcun effetto. Il modo migliore per risolvere questo problema è per voi di restituire il valore da soli, il che rende il metodo più facile da capire:
-(void) test
{
NSString *stringVar = @"UPPER CASE STRING";
stringVar = [self changeString:stringVar];
NSLog(@"value after changed : %@", stringVar);
}
-(NSString *) changeString:(NSString*)string
{
string = [string lowercaseString];
return string;
}
è necessario capire che NSString
è immutabile quindi non c'è modo, diverso da quello riassegnando il riferimento , per cambiare il contenuto di una stringa. È possibile, tuttavia, utilizzare invece NSMutableString
, che può essere modificato in posizione.
fonte
2012-07-31 10:01:18
solo per assicurarsi che, ARC avrebbe gestito la movimentazione anche in questo caso in modo trasparente la memoria, giusto? –
Caro Greg, Questo significa che l'Objective C utilizza per default il meccanismo del passaggio per valore, giusto? –
@JoachimIsaksson: Sì, ARC gestisce correttamente la gestione della memoria (il compilatore ti avviserà se non riesce a capire cosa stai facendo). –