gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:41 24 4
gpt4 key购买 nike

这适用于指针:

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

这里它们不是指针,所以这是行不通的,但这是典型的情况:

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

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

最佳答案

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

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

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

关于objective-c - 可以将 CGVector 转换为 CGPoint 因为它们的大小相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18829497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com