CGFloat和float的区别及案例分析
typedef double CGFloat;// 64-bit
编程策略:
对于需要兼容64位机器的程序而言,所有使用float的地方都改为用CGFloat。
长远角度考虑推荐尽量使用CGFloat,尽管在32位上相比float增加了一些memory footprint的消耗。
案例分析:
64位系统下tableViewCell界面错位,原因如下:
UITableView的代理函数
- (CGFloat)tableView:(UITableView *)tableViewheightForRowAtIndexPath:(NSIndexPath *)indexPath
返回值为CGFloat,如果实现该方法时写成float,在32位不会警告而且界面正常,如果在64位下,则有警告:
区别:
在32位下,CGFloat定义为float; 在64位下,CGFloat定义为double
typedef float CGFloat;// 32-bittypedef double CGFloat;// 64-bit
编程策略:
对于需要兼容64位机器的程序而言,所有使用float的地方都改为用CGFloat。
长远角度考虑推荐尽量使用CGFloat,尽管在32位上相比float增加了一些memory footprint的消耗。
案例分析:
64位系统下tableViewCell界面错位,原因如下:
UITableView的代理函数
- (CGFloat)tableView:(UITableView *)tableViewheightForRowAtIndexPath:(NSIndexPath *)indexPath
返回值为CGFloat,如果实现该方法时写成float,在32位不会警告而且界面正常,如果在64位下,则有警告:
Conflicting return type in implementation of 'tableView:heightForRowAtIndexPath:': 'CGFloat' (aka 'double') vs 'float'
而且各个cell都错位
参考:
http://blog.sina.com.cn/s/blog_6c6b2acd0100z4jb.html