这适用于指针:
CGVector* v = {1, 2};
CGPoint* p = (CGPoint*)v;
这里它们不是指针,所以这不起作用,但这是典型的情况:
CGVector v = {1, 2};
CGPoint p = (CGPoint)v;
然而我想知道,因为两个结构具有相同的大小(2x CGFloat),所以我可以将CGVector“投射”到CGPoint,即使用向量作为CGPoint参数而无需复制和放大。分配结构字段?
答案 0 :(得分:1)
dasblinkenlight的代码CGPoint p = *((CGPoint*)&v);
将起作用,假设两个数据结构具有相同的内存布局/填充等。
但是,要意识到这段代码仍然会将内存复制到一个新变量中,所以它不会比以安全方式(逐个成员的副本)做事更快。无论哪种方式,在决定这些hacky优化之前使用Instruments。
您至少应该创建一个宏或函数来在类型之间进行转换。如果你想做这个hack,可以在宏/函数中执行,这样你以后可以更改它而不会影响太多的代码。