CGFloat è sia una classe che no?
-
27-10-2019 - |
Domanda
Ecco alcune variabili di istanza in un file di intestazione da un libro di sviluppo del gioco per iPhone:
CGFloat *point;
int count;
CGFloat vectorScale;
Ora sono assoluto confuso. Cos'è quell'asterisco prima del punto Ivar? CGFloat è una classe e non lo è?
Soluzione
Un cgfloat è solo un c da typedef per float o un doppio a seconda della piattaforma. Sulle macchine moderne è probabilmente un doppio. Ciò significa che *punta come puntatore a un galleggiante. Dato quel nome, è probabilmente (ipotesi istruita) un puntatore a un array interleate di coordinate XY.
Altri suggerimenti
Non è una classe. su iOS, è un float
. su OSX, lo è float
o double
.
L'asterisco lo dice point
è un puntatore a a CGFloat
. Un libro C introduttivo spiegherà i puntatori.
Se vuoi sapere quale di queste cose è in Xcode, fai clic su opzione sul tipo. Sarai portato alla sua definizione effettiva. Quello che ottengo è:
#if defined(__LP64__) && __LP64__
# define CGFLOAT_TYPE double
# define CGFLOAT_IS_DOUBLE 1
# define CGFLOAT_MIN DBL_MIN
# define CGFLOAT_MAX DBL_MAX
#else /* !defined(__LP64__) || !__LP64__ */
# define CGFLOAT_TYPE float
# define CGFLOAT_IS_DOUBLE 0
# define CGFLOAT_MIN FLT_MIN
# define CGFLOAT_MAX FLT_MAX
#endif /* !defined(__LP64__) || !__LP64__ */
typedef CGFLOAT_TYPE CGFloat;
#define CGFLOAT_DEFINED 1
TL: Dr Non è mai una classe :-)