Objetivo-C solo ayuda que pasa parámetros por valor. El problema aquí probablemente ya se haya solucionado (dado que esta pregunta tiene más de un año de antigüedad), pero necesito aclarar algunas cosas con respecto a los argumentos y Objective-C.
Objective-C es un estricto superconjunto de C, lo que significa que todo lo que C hace, Obj-C lo hace también.
Al tener un rápido vistazo a Wikipedia, que puede see que Function parameters are always passed by value
Objective-C no es diferente. Lo que sucede aquí es que cada vez que pasamos un objeto a una función (en este caso, un UILabel *), pasamos el valor que contiene en la dirección del puntero.
Hagas lo que hagas, siempre será el valor de lo que está pasando. Si desea pasar el valor de la referencia , deberá pasarle un ** objeto (como se ve a menudo al pasar NSError).
Esto es lo mismo con los escalares, se pasan por valor, por lo tanto puede modificar el valor de la variable que recibió en su método y que no cambiará el valor de la variable original que pasó a la función .
He aquí un ejemplo para facilitar la comprensión:
- (void)parentFunction {
int i = 0;
[self modifyValueOfPassedArgument:i];
//i == 0 still!
}
- (void)modifyValueOfPassedArgument:(NSInteger)j {
//j == 0! but j is a copied variable. It is _NOT_ i
j = 23;
//j now == 23, but this hasn't changed the value of i.
}
Si quería ser capaz de modificar i, que tendría que pasar el valor de la referenciade la siguiente manera:
- (void)parentFunction {
int i = 0; //Stack allocated. Kept it that way for sake of simplicity
[self modifyValueOfPassedReference:&i];
//i == 23!
}
- (void)modifyValueOfPassedReference:(NSInteger *)j {
//j == 0, and this points to i! We can modify i from here.
*j = 23;
//j now == 23, and i also == 23!
}
¿Qué quiere decir con "comportarse como si fuera un valor"? –