可以将CGVector转换为CGPoint,因为它们的大小相同吗?

时间:2013-09-16 13:40:37

标签: objective-c c casting struct

这适用于指针:

CGVector* v = {1, 2};
CGPoint* p = (CGPoint*)v;

这里它们不是指针,所以这不起作用,但这是典型的情况:

CGVector v = {1, 2};
CGPoint p = (CGPoint)v;

然而我想知道,因为两个结构具有相同的大小(2x CGFloat),所以我可以将CGVector“投射”到CGPoint,即使用向量作为CGPoint参数而无需复制和放大。分配结构字段?

1 个答案:

答案 0 :(得分:1)

dasblinkenlight的代码CGPoint p = *((CGPoint*)&v);将起作用,假设两个数据结构具有相同的内存布局/填充等。

但是,要意识到这段代码仍然会将内存复制到一个新变量中,所以它不会比以安全方式(逐个成员的副本)做事更快。无论哪种方式,在决定这些hacky优化之前使用Instruments。

您至少应该创建一个宏或函数来在类型之间进行转换。如果你想做这个hack,可以在宏/函数中执行,这样你以后可以更改它而不会影响太多的代码。