2012-04-07 6 views
8

Sì, ho visto questo:Posso contare su nil UIView restituendo CGRectZero per il suo frame?

Se il metodo restituisce una struct, come definito dalla Guida di Mac OS X ABI Chiamata funzione da restituire in registri, poi un messaggio inviato a nil restituisce 0,0 per ogni campo in la struttura Altri tipi di dati struct non verranno riempiti con zeri.

Io proprio non capisco.

risposta

14

Se si utilizzano le versioni recenti del compilatore LLVM (Xcode 4.2 o versioni successive), quindi si, la messaggistica nil con un metodo di restituzione della struttura produrrà una struttura a riempimento zero. Nel caso di CGRect, ciò significa un valore pari a CGRectZero.

Fonte: Greg Parker, che lavora su Apple nel runtime ObjC.

+0

Vedere il documento che ho citato nella domanda. È dal funzionario The Objective-C Programming Language. Si può vedere che già la struct restituita sarà riempita a zero, ma solo per quelli "come definito dalla Guida alle chiamate della funzione ABI di Mac OS X da restituire nei registri". Non sono sicuro di cosa significhi il tweet qui sopra. Significa che ogni struttura ora verrà riempita a zero, inclusi quelli "Altri tipi di dati strutturali che non verranno riempiti con zeri nei vecchi giorni"? – an0

+3

Sì; in passato, nella maggior parte dei casi, messaggistica nil non restituiva una struttura a pieno carico, tranne nel caso fortunato in cui l'ABI restituiva il valore di ritorno della struttura nei registri. (Solo per strutture molto piccole.) I valori di ritorno basati sullo stack non erano riempiti a zero. Ma con il compilatore LLVM in Xcode 4.2 o superiore, ora sono * sempre * zero riempiti. –

+1

Oltre al tweet sopra, è stato anche menzionato in una delle sessioni del WWDC 2011. –

Problemi correlati