Objective-C solo supporto che passa i parametri in base al valore. Il problema qui è stato probabilmente già risolto (Poiché questa domanda ha più di un anno di vita), ma ho bisogno di chiarire alcune cose riguardanti gli argomenti e l'Objective-C.
Objective-C è un superset rigido di C che significa che tutto ciò che C fa, Obj-C lo fa anche.
Di avere una rapida occhiata a Wikipedia, è possibile che seeFunction parameters are always passed by value
Objective-C non è diverso. Quello che sta accadendo qui è che ogni volta che passiamo un oggetto a una funzione (in questo caso un UILabel *), passiamo il valore contenuto all'indirizzo del puntatore.
Qualsiasi cosa tu faccia, sarà sempre il valore di ciò che stai passando. Se si desidera passare il valore del riferimento , si dovrebbe passare un oggetto ** (come spesso si vede quando si passa NSError).
Questa è la stessa cosa con gli scalari, vengono passati per valore, quindi è possibile modificare il valore della variabile ricevuta nel metodo e che non modificherà il valore della variabile originale passata alla funzione .
Ecco un esempio per facilitare la comprensione:
- (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.
}
Se si voleva essere in grado di modificare i, si dovrà passare il valore della di riferimento effettuando le seguenti operazioni:
- (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!
}
Cosa intendi con "comportarsi come se fosse un valore"? –