I'm curious why functions like CGRectMake and CGPointMake exist and are widely used. when, instead, you can do:
(CGRect){{x, y}, {width, height}}
surely this is more efficient (though I'm guessing not by much) as there is no function call?
Also you can set the origin and size like:
(CGRect){origin, size}
and as a mixture:
(CGRect){origin, {width, height}}
What is the reason for not using this, and preferring the Make functions?
It isn't more efficient, actually. The CGRectMake
function (and others) are declared as static inline
, which means the compiler copy pastes the function code straight into every place it's used:
CG_INLINE CGRect
CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
where
# define CG_INLINE static inline
You go from
// code
CGRect myRect = CGRectMake(1,2,3,4);
// code
to
// code
CGRect myRect;
myRect.origin.x = 1; myRect.origin.y = 2;
myRect.size.width = 3; myRect.size.height = 4;
which in principle is no different from
CGRect myRect = (CGRect){1,2,3,4};
after compiler optimizations and such.
As said above you add a dependency on CGRect
being a struct of 4 numbers aligned a certain way as opposed to using a function that has more guarantee to it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With