Domanda

Sto cercando di impostare una proprietà come così -

-interface:

@property (readwrite, assign) CGColorRef otherBallColor;
.

-somemethod:

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];
.

Non appena provo ad accedere al valore che si blocca -

-Someotermethod (Dreanrect in questo caso):

CGContextSetFillColorWithColor(context, otherBallColor);
.

Ma se nel "Somemethod" lo faccio -

CGColorRef ballColor = [UIColor blueColor].CGColor;
.

... funziona tutto bene.Qualcuno può spiegare cosa sta succedendo?

Molte grazie (PS, abbastanza nuovo a Objective-C, non programmazione in generale)

È stato utile?

Soluzione

È necessario conservare il CGColor restituito, il [Uicolore Colorwith ...] crea un'istanza rilasciata automaticamente, quindi, quando è fuori portata (intendo in media temporale), viene rilasciato anche il CGColor corrispondente.

Ti consiglierei di utilizzare Uicolore invece di CGColerref se sono possibile in questo caso.

Altri suggerimenti

Parla di una risposta in ritardo, ma ho una soluzione alternativa a questo particolare problema, che ho corso un po 'di tempo fa.Ho trovato questa domanda prima della soluzione, quindi ho pensato che avrei buttato nei miei due centesimi.Si scopre che UIColor ha un metodo di istanza chiamato setFill, che imposta il ricevitore in quanto il contesto corrente riempimento il colore.Quindi puoi scrivere:

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);
.

Trovo che questa soluzione più pulita, perché non devi preoccuparti di mantenere o successivamente rilasciare qualsiasi CGColors.In effetti, non devi nemmeno affrontare i comandi di impostazione del colore di riempimento grafica principale, come CGContextSetFillColorWithColor.

È possibile controllare il metodo - (void)setFill in modo più dettagliato nel Uicolore Documentazione Apple .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top