Im Wesentlichen ist die Wurzel des Problems ein Hack für das Zurückgeben eines zweiten (optionalen) Objekts.
Wie können wir das tun, da wir nur eine Sache zurückgeben können? Nun, wir könnten eine Art (return_value, error)
Tupel zurückgeben, aber das ist ein bisschen unhandlich. Wir können so viele Parameter haben, wie wir möchten, können wir etwas mit diesen ...
So können Methoden/Funktionen ihre Parameter nicht ändern (um genau zu sein, sie arbeiten mit einer Kopie, so dass sie alle Änderungen machen sind lokal). Das heißt (der Nebenläufigkeitsprobleme beiseite) der Wert von fetchRequest
, bevor die Nachricht in Ihrer Frage den Wert von fetchRequest
danach entspricht. Beachten Sie, dass sich das Objekt, auf das fetchRequest
zeigt, ändern kann, aber der Wert von fetchRequest
selbst nicht.
Dies bringt uns in ein bisschen zu binden. Außer, warten Sie, wir wissen, wir können glücklich den Wert eines Parameters nehmen und modifizieren, worauf es hinweist! Wenn Sie die Deklaration für executeFetchRequest:error:
betrachten, werden Sie sehen, dass es eine NSError**
dauert. Das ist "ein Zeiger auf einen Zeiger auf eine NSError
". Also können wir ein leeres/baumelndes NSError*
initialisieren, die Adresse davon (mit dem unary &
operator) finden und dieses übergeben. Die Methode kann dann dem NSError*
zuweisen, auf den sich dies bezieht.
Voila, wir haben effektiv optionale zusätzliche Rückgabewerte.
Dies ist * Standard * C Zeiger ... der * unary * '&' Operator ist der "Adresse von" Operator.Viele gute Lektüre und * Tutorials * zum Thema und ein paar Stichworte im vorherigen Satz. –
mögliches Duplikat von [Zeiger in C: wann das kaufmännische Und-Zeichen und das Sternchen zu verwenden sind] (http://stackoverflow.com/questions/2094666/pointers-in-c-when-um-die-ampersandsand-and-the- zu verwenden -asterisk) –
@ user166390 Oh Mann du bist schlau !! – user3932000