2012-04-07 4 views

Antwort

14

Wenn Sie die neuesten Versionen des LLVM-Compilers (Xcode 4.2 oder höher) verwenden, wird die Nachrichtenübermittlung nil mit einer struct-returning-Methode eine zero-filled-Struktur erzeugen. Im Fall von CGRect bedeutet das ein Rect gleich CGRectZero.

Quelle: Greg Parker, der bei Apple auf der ObjC-Laufzeit arbeitet.

+0

Siehe das Dokument, das ich in der Frage zitiert habe. Es stammt aus der offiziellen The Objective-C Programmiersprache. Sie können sehen, dass die zurückgegebene Struktur bereits mit Nullen gefüllt ist, aber nur für diejenigen, die "wie in der Mac OS X ABI-Funktionsaufruf-Anleitung in Registern zurückgegeben" definiert sind. Ich bin mir nicht sicher, was der Tweet oben bedeutet. Bedeutet dies, dass jede Struktur jetzt mit Nullen gefüllt ist, einschließlich jener "Andere Strukturdatentypen, die in den alten Tagen nicht mit Nullen gefüllt werden"? – an0

+3

Ja; Es war in den meisten Fällen so, dass Messaging nil keine zero-filled-Struktur zurückgeben würde, außer in dem glücklichen Fall, in dem der ABI, dass der struct-Rückgabewert in Registern übergeben werden sollte. (Nur für sehr kleine Strukturen.) Stack-basierte Rückgabewerte wurden nicht mit Nullen gefüllt. Aber mit dem LLVM-Compiler in Xcode 4.2 oder höher sind sie jetzt * immer * Null gefüllt. –

+1

Zusätzlich zu dem Tweet oben wurde es auch in einer der Sitzungen auf der WWDC 2011 erwähnt. –

Verwandte Themen