2012-04-07 62 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

相關問題