2012-04-07 60 views
8

是的,我看到了这一点:我可以依靠无返回CGRectZero为其框架的UIView?

如果该方法返回一个结构,通过在寄存器中返回的Mac OS X ABI函数调用指南定义,然后发送到零的消息在各个领域返回0.0结构。其他结构数据类型不会被零填充。

我只是不明白。

回答

14

如果您使用的是最新版本的LLVM编译器(Xcode 4.2或更高版本),那么是的,使用结构返回方法的消息nil将生成一个零填充结构。在CGRect的情况下,这意味着等于CGRectZero的矩形。

来源:Greg Parker,他在ObjC运行时在Apple工作。

+0

请参阅我在问题中引用的文档。它来自官方的Objective-C编程语言。你可以看到它已经声明返回的结构将是零填充的,但只适用于那些“由Mac OS X ABI函数调用指南定义的寄存器返回”。我不确定上面的推文意味着什么。这是否意味着任何结构现在都将被填满,包括那些“过去不会被零填充的其他结构数据类型”? – an0 2012-04-07 15:59:16

+3

是的;它曾经是在大多数情况下,消息传递零不会返回一个零填充结构,除非幸运的情况下,结构返回值将被传递到寄存器的ABI。 (只适用于非常小的结构。)基于堆栈的返回值不是零填充的。但是使用Xcode 4.2或更高版本的LLVM编译器,它们现在*总是被填满。 – 2012-04-07 16:21:26

+1

除了上面的推文之外,它在WWDC 2011的其中一次会议中也提到过。 – 2012-04-07 16:24:07

相关问题