Pregunta

Estoy intentando establecer una propiedad así:

-interfaz:

@property (readwrite, assign) CGColorRef otherBallColor;

-algún método:

CGColorRef ballColor = [UIColor colorWithRed:255.0/256.0 green:165.0/256.0 blue:239.0/256.0 alpha:1.0].CGColor;  
[self setOtherBallColor:ballColor];

Tan pronto como intento acceder al valor, falla.

-someOtherMethod (drawRect en este caso):

CGContextSetFillColorWithColor(context, otherBallColor);

Pero si en "algún método" lo hago -

CGColorRef ballColor = [UIColor blueColor].CGColor;

...todo funciona bien.¿Alguien puede explicar qué está pasando?

Muchas gracias (PD, bastante nuevo en Objective-C, aunque no en programación en general)

¿Fue útil?

Solución

Debe conservar la CGCOLOR devuelta, su [Uicolor Colorwith ...] crea una instancia de liberación automática, por lo que, cuando está fuera de alcance (Autorelado en lo que quiero decir), también se libera CGCOLOR correspondiente.

Le recomendaría que use Uicolor en lugar de CGCOLORREF si es posible en este caso.

Otros consejos

Hable sobre una respuesta tardía, pero tengo una solución alternativa a este problema en particular, con el que me encontré hace un tiempo.Encontré esta pregunta antes de la solución, así que pensé en aportar mi granito de arena.Resulta que UIColor tiene un método de instancia llamado setFill, que establece el receptor como el color de relleno del contexto actual.Entonces podrías escribir:

CGContextRef myContext = UIGraphicsGetCurrentContext();
[[UIColor colorWithRed:255.0/255.0 green:165.0/255.0 
                  blue:239.0/255.0 alpha:1.0] setFill];
CGContextFillPath(myContext);

Considero que esta es una solución más limpia, porque no tienes que preocuparte por retener o liberar posteriormente ningún CGColors.De hecho, ni siquiera tienes que lidiar con ningún comando de configuración de color de relleno de Core Graphics, como CGContextSetFillColorWithColor.

Puedes consultar el - (void)setFill método con más detalle en el Documentación de UIColor Apple.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top