Objective c 最大CGFloat值是否有一个常数?

Objective c 最大CGFloat值是否有一个常数?,objective-c,ios,foundation,core-foundation,cgfloat,Objective C,Ios,Foundation,Core Foundation,Cgfloat,我需要创建一个CGSize来计算任意长度的任意文本的文本高度。UIKit有一个很好的方法——sizeWithFont:constrainedToSize:并且我的文本只在宽度上受约束,而在高度上不受约束 为此,我需要为高度设置最大可能的CGFloat 有没有像“CGFloatMax”这样的常数?aCGFloat只是一个float,因此您可以从安全地使用FLT\u MAX 编辑:正如其他人现在指出的,似乎已经为您定义了CGFLOAT\u MAX,因此您应该使用它来保持一致性,而不是FLT\u MA

我需要创建一个CGSize来计算任意长度的任意文本的文本高度。UIKit有一个很好的方法——sizeWithFont:constrainedToSize:并且我的文本只在宽度上受约束,而在高度上不受约束

为此,我需要为高度设置最大可能的CGFloat


有没有像“CGFloatMax”这样的常数?

a
CGFloat
只是一个
float
,因此您可以从
安全地使用
FLT\u MAX

编辑:正如其他人现在指出的,似乎已经为您定义了
CGFLOAT\u MAX
,因此您应该使用它来保持一致性,而不是
FLT\u MAX
,即使它们在32位平台上是相同的东西。

定义:

#define CGFLOAT_MAX FLT_MAX

怎么样?

这与其说是一个答案,不如说是一个评论,但我目前没有足够的声誉来评论

在使用CGFLOAT_MAX时,我遇到了意想不到的行为:在运行iOS 7.1.2并使用Xcode 5.1.1的iPhone 5S(64位)设备上,以下代码:

CGFloat numRot = floorf(CGFLOAT_MAX / 360.0);
NSLog(@"numRot = %.2f", numRot);
产出:

numRot = inf
鉴于,本准则:

CGFloat numRot = floorf(FLT_MAX / 360.0);
NSLog(@"numRot = %.2f", numRot);
正确输出:

numRot: 945228740662580166143622731901435904.00
I command+单击CGFLOAT_MAX,Xcode将我带到具有以下宏定义的CoreGraphics Framework CGBase.h文件:

# define CGFLOAT_MAX DBL_MAX
I command+单击CGFloat,Xcode将我带到同一文件中的另一行:

typedef CGFLOAT_TYPE CGFloat;
然后我用command+单击CGFLOAT_类型,它跳转到此处的#define行:

#if defined(__LP64__) && __LP64__
# define CGFLOAT_TYPE double
...
因此,出于某种原因,我的CGFloat变量应该是一个double,但是当它被赋予一个double值(即CGFloat_MAX)时,它似乎是一个溢出的float。据我所知,使用%f和NSLog应该打印双精度-如果这是错误的,请有人纠正我


综上所述,如果FLT_MAX适用于您的情况,您现在可能希望坚持使用FLT_MAX而不是CGFLOAT_MAX,尤其是如果您依赖的库专门接受浮点参数而不是双精度或CGFLOAT。

对于使用Swift 2的用户,您应该使用:

CGFloat.max
CGFloat.greatestFiniteMagnitude
对于使用Swift 3的用户,应使用:

CGFloat.max
CGFloat.greatestFiniteMagnitude
请注意,
CGFloat.max
在Swift 3发布时被删除,如图所示


宽度=0.0000000000000000000000000117549435,高度=3.40282347E+38在Swift 3.0中,您也可以使用CGFloat(FLT_MAX),特别是如果您想在zIndex等其他情况下使用它,其中CGFloat.greatestfinitemagnity将超出范围。

我正在寻找一个快速版本的最小值CGFloat值,如果您也在这里;)下面是答案:

CGFloat.leastNormalMagnitude

@回答:每个人都投了赞成票。考虑到他们彼此之间的距离不超过4秒,哈。你可能会花更少的时间来检查文档,而不是在这里发布这样的问题。@Josh Caswell:我认为很多人不知道(至少部分)文档的存在。在本例中,UIKit在所有地方都使用CGFloat,因此提问者可能只查看了UIKit文档@Mikhalo Ivanokov,你需要的是核心图形(CG)文档:苹果的在线文档搜索也很有用(我发现它比Xcode的或谷歌的要好):@Peter:我知道文档很难导航,我知道这是一项需要学习的技能,但键入“CGFloat”进入Xcode的搜索框可以直接进入CGGeometry参考。不过,类型会根据系统的不同而变化。假设iOS现在都是32位的,但我们不应该假设其底层类型为typedef。@乔希:的确-谢谢-我在随后的编辑中注意到了这一点,现在CGFloat并不总是一个float-当在OS X上编译64位的应用程序时,CGFloat被定义为双精度。请参阅CGBase.h,关于第100行。@leecbaker:这是一个特定于iOS的问题,所以至少目前所有内容都是32位的。但是,是的,你是对的,如果我们将讨论扩展到OS X,那么我们必须考虑64位构建,其中CGFloat是双精度的。嘿,我刚从未来回来,他们实际上已经有64位iOS设备了!;)注意:从Swift 3开始,这是CGFloat。greatestFiniteMagnitude:“对应于C宏FLT_MAX、DBL_MAX等。这些宏的命名有点误导,因为无穷大大于此值。”