iOS

CGFloat 和 float的区别

Posted by shefh on January 5, 2017

CGFloat 和float 的区别主要还是在64为机器下。

下面来看看Objective-c 对CGFloat 的定义:

#if defined(__LP64__) && __LP64__
# define CGFLOAT_TYPE double
# define CGFLOAT_IS_DOUBLE 1
# define CGFLOAT_MIN DBL_MIN
# define CGFLOAT_MAX DBL_MAX
#else
# define CGFLOAT_TYPE float
# define CGFLOAT_IS_DOUBLE 0
# define CGFLOAT_MIN FLT_MIN
# define CGFLOAT_MAX FLT_MAX
#endif

/* Definition of the `CGFloat' type and `CGFLOAT_DEFINED'. */

typedef CGFLOAT_TYPE CGFloat;

从上面的代码我们可以看出来,在64为机器上,CGFloat 本质上是double类型,在32为机器上CGFloat和float是一样的。为了数据的安全性,建议还是使用CGFloat 代表浮点数。

同理,NSInteger 和int也是一样的

#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif