2

这适用于指针:

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

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

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

但是我想知道,由于两个结构的大小相同(2x CGFloat),有什么方法可以将 CGVector 转换为 CGPoint,即使用向量作为 CGPoint 参数,而无需复制和分配结构字段?

4

1 回答 1

1

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

但是,请意识到此代码仍会将内存复制到一个新变量中,因此它不会比仅以安全方式(逐个成员复制)做事快得多。无论哪种方式,在决定这些 hacky 优化之前使用 Instruments。

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

于 2013-09-16T14:26:07.917 回答