在Objective-C中,是更好地使用CGRectGetHeight(view.bounds)还是直接使用view.bounds.size.height?

16

我记得在某个地方读到过一个建议,它认为最好使用CGRectGetHeight(rect)来访问CGRect的高度,而不是通过rect.size.height访问变量。但现在我找不到那篇文章了。

CGFloat height = CGRectGetHeight(self.frame);
// vs  
CGFloat height = self.frame.size.height;

大多数情况下,这与我使用的视图有关,我想知道除了语法之外,是否存在真正区分这两行代码的差异。

如果其中一种更优先于另一种,那么解释为什么更好!

1个回答

20

CGRect结构体可能会以负值存储高度和宽度,而CGRectGetHeight函数将始终返回正值。在Swift 3.0中,应使用CGRect.height属性而不是CGRectGetHeight

CGRect.height

无论高度是否以正数或负数的形式存储在CGRect数据结构中,此函数都返回标准化矩形的高度。也就是说,结果永远不是负数。


就是这样,我记不得它为什么这么说了!谢谢!我会在10分钟内接受的(等系统允许)。 - Logan
更通用地说,来自CGGeometry参考文献:“本参考文献中描述的所有函数都将CGRect数据结构作为输入,并在计算结果之前隐式地标准化这些矩形。因此,您的应用程序应避免直接读取和写入存储在CGRect数据结构中的数据。而是使用此处描述的函数来操作矩形并检索其特征。” - Zev Eisenberg
在 Xcode 8.2.1 中使用 CGRectGetHeight 会导致编译错误:“_CGRectGetHeight' 已被属性 'CGRect.height' 替换”。 - RobertJoseph
在Swift中,CGRectGetHeight的等价写法是CGRect.height。例如:view.frame.height。 - iOS Nepal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接