Aar*_*ger 11 cocoa-touch objective-c cgfloat ios
考虑这样的布局代码:
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;
Run Code Online (Sandbox Code Playgroud)
如何通过支持64位iOS设备来重写第三行?
(当前代码不考虑yCoordinateOfSomeOtherView是a float还是a double.)
一些选项(我不确定哪个是最好的):
#if defined(__LP64__) && __LP64__
#define cgfmax(x,y) fmaxf(x,y)
#else
#define cgfmax(x,y) fmax(x,y)
#endif
Run Code Online (Sandbox Code Playgroud)
然后我可以代替fmax使用cgfmax.
tgmath.h2011年的Stack Overflow回答建议替换math.h为tgmath.h.这取代了fmax一个调用__typeof__每个参数并返回fmax或者fmaxf根据参数类型返回的实现.
由于CGFloats与布局有关,因此将a存储float到a中的数据丢失double通常是微不足道的.也就是说,它们将代表微小的像素部分.
我正在寻找之前完成32位到64位转换的人的任何其他选项或有用建议.
将a转换float为a 时,从未发生任何"数据丢失" double.转换总是准确的.
您的解决方案1和2在语义上完全等同,但(2)在风格上更正确.
您的解决方案3正式不相同; 它可能会在float和double之间产生额外的转换,这可能会使效率略低(但实际结果是相同的).
基本上,它没关系,但使用tgmath.
| 归档时间: |
|
| 查看次数: |
2306 次 |
| 最近记录: |