CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);
fa questo ritorno un galleggiante, o un array di carri? Sembra che l'asterisco sia una scorciatoia per la creazione di un array. È corretto?
Sort of.
CGFloat *colors
dichiara una variabile con un puntatore ad almeno un CGFloat. CGColorGetComponents
restituisce un puntatore a diversi CGFloats, uno dopo l'altro, un array C. Prendi il puntatore e assegnalo a (posiziona il puntatore) nella variabile colors
.
Dichiarare la variabile non creare la matrice. In effetti, nemmeno lo CGColorGetComponents
. Qualunque cosa abbia creato l'oggetto CGColor ha creato la matrice e l'ha memorizzata all'interno dell'oggetto; CGColorGetComponents
consente di avere il puntatore a quella memoria.
La dichiarazione della variabile CGFloat *colors
crea solo un luogo, la variabile, per memorizzare un puntatore su uno o più CGFloats. La cosa nella variabile è il puntatore e la cosa in quel puntatore è l'array.
Se non è ancora chiaro, vedere Everything you need to know about pointers in C.
fonte
2009-04-27 09:55:42
@htw Grazie. Significa che è sempre RGBA? Non ho visto uno spazio colore HSBA in nessuna delle API. –
Non sempre: è possibile che CGColor sia stato creato nello spazio colore CMYK o bianco, ad esempio. Tuttavia, secondo la documentazione sulla programmazione dei colori di Apple (http://developer.apple.com/DOCUMENTATION/Cocoa/Conceptual/DrawColor/index.html), lo spazio colore HSBA è designato come spazio colore RGBA. Quindi, sì, in questo caso, restituirebbe i componenti RGBA, poiché il colore è stato creato con componenti HSBA. – hbw
@htw Grazie! Ho esaminato i documenti. Questo è sicuramente quello che dovevo trovare. Molto utile! –