Ist CGFloat sowohl eine Klasse als auch nicht?
-
27-10-2019 - |
Frage
Hier finden Sie einige Instanzvariablen in einer Header -Datei aus einem iPhone -Game -Develpment -Buch:
CGFloat *point;
int count;
CGFloat vectorScale;
Jetzt bin ich absolut verwirrt. Was ist das für ein Sternchen vor dem Punkt Ivar? Ist CGFloat eine Klasse so gut wie nicht?
Lösung
Ein CGFloat ist nur ein C -Typedef für Float oder ein Doppel, abhängig von Ihrer Plattform. Auf modernen Maschinen ist es wahrscheinlich ein Doppel. Dies bedeutet, dass *als Zeiger auf einen Schwimmer verweist. Angesichts dieses Namens ist es wahrscheinlich (gebildete Vermutung) ein Zeiger auf ein verschachteltes Array von XY -Koordinaten.
Andere Tipps
Es ist keine Klasse. Auf iOS ist es ein float
. Unter OSX ist es float
oder double
.
Das Sternchen sagt das point
ist ein Zeiger auf a CGFloat
. Ein Einführungsbuch wird Zeiger erklären.
Wenn Sie wissen möchten, was eines davon in Xcode ist, klicken Sie auf den Typ. Sie werden zu seiner tatsächlichen Definition gebracht. Was ich bekomme ist:
#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 Es ist nie eine Klasse :-)