Warum sollten Sie eine statische Variable auf Null überprüfen, wenn sie in der vorherigen Zeile auf Null initialisiert wurde?

8

Im Folgenden finden Sie ein Codebeispiel von Apples iOS Core Data-Tutorial und ich fand es seltsam, dass die bedingten Anweisungen prüfen, ob das Objekt null ist. Würde das Objekt nicht immer zu null ausgewertet, wenn die Zeile vor der Bedingung das Objekt auf null setzt?

%Vor%     
Kyle Hayes 07.01.2012, 20:33
quelle

3 Antworten

19

Wegen der static . Diese Variable wird nicht auf nil gesetzt, wenn die Ausführung diese Anweisung durchläuft, sie wird nur beim Programmstart festgelegt.

Das ist eine Eigenschaft von statischen Speicherdauervariablen. Sie werden beim Start auf ihren initialisierten Wert gesetzt und behalten den Wert bei, den Sie danach festgelegt haben. Zum Beispiel der folgende Code:

%Vor%

gibt keine lange Folge von Nullen aus, wenn Sie es hunderte Male nennen. Es wird ausgegeben:

%Vor%

Im Falle des Apple-Codes bedeutet dies, dass das Datumsformatierprogramm nur einmal erstellt wird und (sofern Sie es nicht anderswo an anderer Stelle als nil festgelegt haben) nur einmal erstellt wird. Dies kann manchmal wichtig für die Leistung sein, wenn die Objekterzeugung eine nicht triviale Sache ist, aber selbst wenn nicht, ist es sinnlos, etwas kontinuierlich neu zu erstellen, das Sie einfach wiederverwenden können.

    
paxdiablo 07.01.2012, 20:37
quelle
5

Ich gehe davon aus, dass dieser Code vom Körper einer Funktion stammt. Sie müssen beachten, dass die Variable static ist. Das heißt, wenn diese Funktion zum ersten Mal aufgerufen wird, wird sie auf nil gesetzt. Wenn die Funktion jedoch next aufgerufen wird, behält sie ihren Wert aus dem vorherigen Aufruf bei.

Das Ergebnis ist also faule Initialisierung . Ein neues NSDateFormatter wird nur beim ersten Aufruf dieser Funktion initialisiert.

static macht es im Wesentlichen zu einer globalen Variable, die auf diesen Wert initialisiert wird, aber nur für die Funktion sichtbar ist, in der es deklariert ist.

    
Jonathon Reinhart 07.01.2012 20:37
quelle
1

Das "statisch" bedeutet, dass es nur einmal beim Initialisieren dieser Klasse und beim ersten Durchlauf ausgewertet wird. Nachfolgende Durchläufe werden direkt darüber überspringen und mit der nächsten Zeile fortfahren.

    
Hubert Kunnemeyer 07.01.2012 20:44
quelle

Tags und Links