获取frame的x,y,width,height时,是否推荐使用CGGeometry来获取?

最近在制定公司的ios开发技术规范时,参考了纽约时报iOS开发团队的编程风格。文档里面有如下:

CGRect函数

当需要获取一个CGRect矩形的x,y,width,height属性时,应使用CGGeometry函数,而非直接访问结构体成员。
 
例如:
恰当用法:
CGRect frame = self.view.frame;
 
CGFloat x = CGRectGetMinX(frame);
CGFloat y = CGRectGetMinY(frame);
CGFloat width = CGRectGetWidth(frame);
CGFloat height = CGRectGetHeight(frame);
 
不当用法:
CGRect frame = self.view.frame;
 
CGFloat x = frame.origin.x;
CGFloat y = frame.origin.y;
CGFloat width = frame.size.width;
CGFloat height = frame.size.height;

我一般都使用frame.origin.x这样的写法,想问下,你们是不是也是如此,是否应该推荐使用CGGeometry,为什么?

以下是BOOL变量的使用:

恰当用法:
if (isAwesome)
if (![someObject boolValue])
 
不当用法:
if ([someObject boolValue] == NO)
if (isAwesome == YES) // Never do this.

我都是if (isAwesome == YES)类似这样的写法,参考github上的一些知名开源的项目,好像也有这样的写法。不知道这样为什么不被推荐

阅读 4.7k
1 个回答

CGRectX 系统语义性更好,更方便理解,它底层也是调的 view.frame.origin 等,但它提供了其他一些很好用的方法,参见:http://nshipster.cn/cggeometry/

第二个问题,isAwesome 是 bool 类型,事实上 bool 是 char 的 typedef,如果 isAwesome = 2,应该为真,而你的 isAwesome == YES 就是假了(YES 为 1),参见:http://nshipster.cn/bool/

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题