0

来源如下:

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

对我来说,这看起来像是一个过于复杂的演员表(以不同于最初预期的方式读取一块内存)。是否有需要这种语法的原因?我只是问,因为我以前从未见过这个。

4

1 回答 1

1

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

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

于 2012-07-12T11:05:48.220 回答