CGfloat和float的区别?
现在上架的app都要求支持64位系统,那么CGFloat和float的区别就在这里.command+左键点击CGFloat.
typedef CGFLOAT_TYPE CGFloat;
这里可以看到CGFloat是CGFLOAT_TYPE的宏定义,那么这个又是什么?
#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
这段话的意思就是,64位系统下,CGFLOAT是double类型,32位系统下是float类型.CGFloat能够保证你的代码在64位系统下也不容易出错,所以你的代码应该尽量使用CGFloat.尽管他可能造成一些多余的消耗.不过能保证安全.
应该使用FOUNDATION_EXPORT还是#define来定义常量?
一般iOS我们定义常量的方法有两种,来看下面例子
我的.h文件
FOUNDATION_EXPORT NSString * const kMyConstantString;
FOUNDATION_EXPORT NSString * const kMyConstantString2;
.m文件是这样定义的
NSString * const kMyConstantString = @"Hello";
NSString * const kMyConstantString2 = @"World";
还有一种是常用的#define方法了
#define kMyConstantString @"Hello"
有什么区别呢?
使用第一种方法在检测字符串的值是否相等的时候更快.对于第一种你可以直接使用(stringInstance == MyFirstConstant)来比较,而define则使用的是这种.([stringInstance isEqualToString:MyFirstConstant])
哪个效率高,显而易见了.第一种直接比较的是指针地址,而第二个则是一一比较字符串的每一个字符是否相等.
static inline function是干嘛的?
static inline 可以定义一个函数,相当于宏定义函数一样,不同的是static inline 只能定义简单的函数,定义复杂函数会不被编译器执行。 static inline 也可以使用UIKIT_STATIC_INLINE(由系统定义的宏)
#define UIKIT_STATIC_INLINE static inline
网友评论