我很好奇为什么像cgrectmake和cgpointmake这样的函数存在并被广泛使用。
相反,您可以:

(CGRect){{x, y}, {width, height}}

当然,这是更有效的(虽然我猜不是很多)因为没有函数调用?
也可以设置原点和大小,如:
 (CGRect){origin, size}

作为混合物:
 (CGRect){origin, {width, height}}

为什么不使用它,而更喜欢make函数?

最佳答案

实际上,效率并不高。CGRectMake函数(和其他函数)声明为static inline,这意味着编译器副本将函数代码直接粘贴到它使用的每个位置:

CG_INLINE CGRect
CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)

哪里
#  define CG_INLINE static inline

你从
// code
CGRect myRect = CGRectMake(1,2,3,4);
// code


// code
CGRect myRect;
myRect.origin.x = 1; myRect.origin.y = 2;
myRect.size.width = 3; myRect.size.height = 4;

原则上和
CGRect myRect = (CGRect){1,2,3,4};

在编译器优化等之后。
如上所述,您添加了对CGRect的依赖,它是一个由4个数字组成的结构,以某种方式对齐,而不是使用一个对它有更多保证的函数。

关于iphone - 为什么要使用CGRectMake之类的功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11700535/

10-11 22:44
查看更多