Beispiel: Die Methode -save:
von NSManagedObjectContext
wird wie folgt deklariert:
Da NSError bereits eine Klasse ist und die Übergabe eines Zeigers tatsächlich dazu führt, dass dieses Objekt in der Implementierung von -save:
geändert wird, welchen Zweck hat es, einen Zeiger auf einen Zeiger zu setzen? Was ist der Vorteil / Sinn?
Anwendungsbeispiel:
%Vor%Wenn Sie nur einen Zeiger übergeben haben, würde die gesamte Methode das bereits vorhandene NSError-Objekt, auf das Sie zeigen, ändern.
Wenn Sie einen Zeiger auf einen Zeiger übergeben, kann er neue NSError-Objekte erstellen und Sie mit einem Zeiger beliefern, der auf sie zeigt.
Es wird von einigen Leuten als "out" -Parameter bezeichnet.
Sie übergeben keinen Zeiger an ein NSError-Objekt. Sie übergeben einen Zeiger an eine lokale Variable . Dies gibt der aufgerufenen Methode die Möglichkeit, Ihre lokale Variable zu ändern. In diesem Fall, um es einer NSError-Instanz zuzuordnen.
Vielleicht verwirrend ist, dass die lokale Variable, die Sie an save:
übergeben, selbst ein Zeiger ist, sodass der Variablentyp ein Zeiger auf einen Zeiger ist.
Unterste Zeile, es ist ein Zeiger auf eine lokale Variable, und es funktioniert das gleiche, ob die lokale Variable int
oder NSError*
ist.
@Anon ist korrekt. Ich füge hinzu: Dies ist der Cocoa-Weg, um Fehler zu erzeugen, anstatt Ausnahmen zu werfen.
In Ihrem Beispiel haben Sie:
%Vor% Unmittelbar nach dem Aufruf von save:
, wenn ein Fehler aufgetreten ist, hat die save:
Methode ein neues NSError
Objekt erstellt und Ihre error
Variable so geändert, dass sie von nil
auf neu zeigt Fehlerobjekt Auf diese Weise können Sie das Objekt NSError
selbst untersuchen und entsprechend darauf reagieren.
IMO, das ist sauberer, als eine Ausnahme zu werfen (was in meiner Philosophie nur geschehen sollte, wenn etwas katastrophales und nicht behebbares passiert).
Wenn Sie gerade einen Zeiger übergeben haben Die Methode könnte das ändern bereits vorhandenes NSError-Objekt, das Sie zeigen auf.
Sie können ein NSError-Objekt nicht ändern.
NSError ist unveränderlich. Aus diesem Grund benötigen Sie den Zeiger auf die Variable NSError. Sie können nur einen brandneuen NSError erstellen. So ändern Sie den Zeiger, um auf Ihren neu erstellten NSError zu zeigen.
Tags und Links objective-c iphone pointers