我很好奇为什么像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/