Ersatz für `fabs`,` fmax` usw. zur Verwendung mit CGFloat auf 64-Bit-iOS-Geräten
Betrachten Sie den Layout-Code wie folgt:
CGFloat descriptionHeight = // height of a paragraph of text with zero or more words;
CGFloat imageHeight = // height of an image;
CGFloat yCoordinateOfSomeOtherView = fmax(descriptionHeight, imageHeight) + 5.0f;
Wie soll die dritte Zeile mit Unterstützung für 64-Bit-iOS-Geräte umgeschrieben werden?
(Der aktuelle Code berücksichtigt nicht, obyCoordinateOfSomeOtherView
ist einfloat
oder eindouble
.)
Ein paar Optionen (ich bin mir nicht sicher, welche am besten ist):
1. Definiere mein eigenes Makro#if defined(__LP64__) && __LP64__
#define cgfmax(x,y) fmaxf(x,y)
#else
#define cgfmax(x,y) fmax(x,y)
#endif
Ich könnte dann ersetzenfmax
mitcgfmax
.
tgmath.h
Diese Stack Overflow Antwort ab 2011 schlägt ersatz vormath.h
mittgmath.h
. Dies ersetzt die Implementierung vonfmax
mit einem, der anruft__typeof__
auf jedes Argument und gibt entwederfmax
oderfmaxf
abhängig von den Argumenttypen.
Da sich CGFloats auf das Layout beziehen, kann der Datenverlust beim Speichern einesfloat
in eindouble
wird in der Regel unbedeutend sein. Das heißt, sie repräsentieren winzige Bruchteile von Pixeln.
Ich suche nach anderen Optionen oder hilfreichen Ratschlägen von jemandem, der zuvor einen 32-Bit- auf 64-Bit-Übergang durchgeführt hat.