2010-04-22 9 views
5

Quiero hacer un método que tome un CGFloat por referencia.¿Cómo pasar y establecer un CGFloat por referencia?

¿Podría hacer algo como esto?

- (void)doStuff:(CGFloat*)floatPointer 

Supongo que debe ser diferente a otros punteros a objetos que tienen dos de esas estrellas. Además no estoy seguro de si debo hacer algo como:

- (void)doStuff:(const CGFloat*)floatPointer 

Y, por supuesto, ni idea de cómo asignar un valor a CGFloat que floatPointer. ¿Tal vez &floatPointer = 5.0f;?

¿Podría alguien dar algunos ejemplos y explicar esto? ¡Sería genial!

Respuesta

9

Objective-C es todavía c, por lo

-(void) doStuff (CGFloat *) f 
{ 
    *f = 1.2; 
} 

llamada con

CGFloat f = 1.0; 
[self doStuff:&f]; 
3

Si estás pasando un CGFloat por referencia, a continuación, acceder a él es simple:

- (void)doStuff:(CGFloat*)floatPointer { 
    *floatPointer = 5.0f; 
} 

Explicación: como que está recibiendo una referencia, necesita de-reference el puntero (con el *) para obtener o establecer el valor.

+0

Eso es bueno saber. Gracias. ¿Por qué debo escribir la palabra clave const delante de CGFloat? – dontWatchMyProfile

+0

No se puede asignar un valor a un puntero const ... – kennytm

+0

La palabra clave const dice: "Le paso la referencia pero no puede modificarla". –

2

si (punteros de odio y ;-) prefieren Objective-C++ pasan por referencia, la siguiente es una variante :

-(void) doStuffPlusPlus:(CGFloat &) f 
{ 
    f = 1.3; 
} 

llamada

CGFloat abc = 1.0; 
[self doStuffPlusPlus:abc]; 

y, debe cambiar el nombre del nombre de archivo de fuente de ???. M a ???. Mm

Cuestiones relacionadas