来源如下:

NS_INLINE NSSize NSSizeFromCGSize(CGSize cgsize) {
    union _ {NSSize ns; CGSize cg;};
    return ((union _ *)&cgsize)->ns;
}


对我来说,这看起来像一个过于复杂的转换(读取内存的方式与最初的意图不同)。是否有需要此语法的原因?我只是问,因为我从未见过。

最佳答案

是的,这实际上是演员。在C中,因此在Objective-C中,您不能将一种结构类型转换为另一种-通常,这是一件好事!但是,您可以将指向任何对象的指针转换为指向其他任何对象的指针-通常这很危险...

因此,当且仅当您确实知道两个结构相同时,才可以通过获取变量的地址(&cgsize)将值从一种结构类型的变量转换为另一种结构类型的值,并将结果转换为指针((union _ *)),然后取消引用指针(->ns)以获得类型强制转换值。任何体面的编译器都会对其进行优化,并直接复制该值。

10-08 08:27