2016-06-21 14 views
0

In meiner App sieht es aus wie die Eigenschaft im Speicher geladen wird, bevor es überhaupt aufgerufen wird. Entweder stimmt etwas nicht mit meinem Verständnis oder ich habe etwas übersehen. Um zu zeigen, dass ich einen Haltepunkt gesetzt habe bald nach Signin angezapft wird, wie Sie auf dem Bild (Linie 226) sehen:Swift Eigenschaft im Speicher vor der Initialisierung geladen heißt

enter image description here

Ich erwarte eine Eigenschaft let user = User() auf Linie zu initialisieren 230. So I Ich habe keine Ahnung, wie der Benutzer bereits im Speicher geladen sein könnte, wie unten links im angehängten Bild zu sehen ist.

Warum passiert das?
Ist das eine Art Code-Optimierung, die unter der Haube passiert?

Ich kann bestätigen, dass user zuvor nicht geladen/initialisiert wurde (es ist keine Klasseneigenschaft). Zusätzlich kann ich bestätigen, dass das Auskommentieren von Zeile 230 und darunter dazu führt, dass der Benutzer nicht geladen wird, so dass es aussieht, dass die Zeile 230 der Grund dafür ist, dass ein Benutzer geladen wird. Aber das Seltsame ist, dass dies passiert, bevor es aufgerufen wird, da ich die Ausführung in Zeile 226 mit einem Breakpoint pausiert habe.

Antwort

3

Es ist wichtig, die Variablenliste lesen zu können. Alle lokalen Variablen werden immer angezeigt, auch wenn sie noch nicht initialisiert wurden, da der Speicher bereits für sie reserviert wurde. Vor der Initialisierung wird daher die Variable angezeigt, aber ihr Wert kann falsch sein. Meine Schätzung ist, dass der Wert gefälscht ist. Es sagt es ist ein Benutzer, weil das sein Typ ist, aber zu der Zeit, die Sie suchen, zeigt es auf Müll, und Sie sollten es ignorieren. Nachdem der Ausführungspfad die Initialisierung durchlaufen hat, ändert sich der Wert und ist der tatsächliche Wert.

(Wenn dies jedoch ein Release-Build ist, dann könnte es in der Tat eine Optimierung geben, denn dies ist eine Konstante, deren Wert nicht von vorherigem Code abhängt, so dass es jederzeit zugeordnet werden kann Sie sollten ein Release-Build nicht debuggen.)

2

Es wurde nicht in den Speicher geladen. Der Debugger sieht die Variable im Bereich und zeigt sie an, aber die Nummer, die sie anzeigt, ist, was im Speicher herumliegt. Wenn Sie über Ihre let user...-Anweisung hinausgehen, sollten Sie sehen, dass sich der Wert der Variablen in etwas ändert, das den anderen Objektadressen in Ihrem Bild ähnlicher ist.

Verwandte Themen