cadena en -(void) changeString:(NSString*)string
es variable local, método para devolver valor de forzado mira la referencia al [NSString lowerCaseString]
method, puedes ver que devuelve una nueva cadena, con los caracteres en minúscula:
Devuelve la representación en minúscula del receptor.
- (NSString *)lowercaseString
Lo que hace el código es simplemente sobrescribir la referencia a la cadena de entrada con la salida de la llamada lowercaseString
, que no tiene ningún efecto. La mejor manera de resolver este problema es para que pueda devolver el valor a sí mismo, lo que hace que el método más fácil de entender:
-(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;
}
Es necesario comprender que NSString
es inmutable por lo que no hay manera, aparte de la reasignación de la referencia , para cambiar el contenido de una cuerda. Sin embargo, podría usar NSMutableString
, que puede modificarse en su lugar.
sólo para asegurarse, ARC se ocuparía de la manipulación, incluso en este caso de forma transparente la memoria, ¿verdad? –
Querido Greg: Esto significa que el Objetivo C usa de forma predeterminada el mecanismo de pasar por valor ¿no? –
@JoachimIsaksson: Sí, ARC maneja la administración de memoria correctamente (el compilador le avisará si no puede entender lo que está haciendo). –