Es gibt viele Cocoa-Methoden, die ein NSError-Objekt als Parameter für eine Methode benötigen, aber in Wirklichkeit ein Fehlerobjekt an die aufrufende Methode zurückgeben, wenn Fehler vorhanden sind. Wird dieses zurückgegebene Objekt beibehalten? Das heißt, in dem anrufenden Objektcode (das Verfahren zu dem der Fehler zurückgegeben wird), ist es müssen einige Code wie:Muss ich ein zurückgegebenes NSError-Objekt freigeben?
NSError *error;
[apiCall .... error:&error];
if (error){
[*error release];
}
ich diese irgendwo gesehen haben, und wenn es nicht sein müssen freigegeben, ist das der Weg, es zu tun?
Der Grund, warum ich den [* Fehlercode] gesetzt habe, ist, dass Sie auch die NSError-Variable wie folgt angeben können: NSError ** error; Was ist ein Punkt zu einem Punkt auf das Objekt. Ist das gültig? – casademora
Sie geben 'NSError **' als Typ für 'Fehler' nur dann an, wenn es sich um einen 'Ausgangsparameter' oder 'Ausgangsparameter' handelt. In diesem Fall würden Sie deneferenzieren, aber beachten Sie, dass "* error" den Typ 'NSError *' hätte. Sie verwenden out-Parameter, um zu umgehen, dass Funktionen nur einen Rückgabewert haben. Out-Parameter in Objc-C verwenden 'Type **', da Argumente Pass-by-Value sind. Beachten Sie auch, dass, wenn 'error' den Typ' NSError ** 'hätte, Sie ihn entweder mit einem Zeiger auf ein' NSError * 'initialisieren müssten (was Sie im API-Aufruf tun) oder einen Zeiger zuweisen, was passiert aber ist ein bisschen seltsam. – outis
@outis Wenn es automatisch freigegeben wird, dann wird es nicht in der Aufrufermethode falsch verwendet. Weil der Umfang der Methode, die tatsächlich den NSError * erzeugt und ihn dem out-Parameter NSError ** zugewiesen hat, mit dem Methodenaufruf beendet ist und wir ihn danach im Aufrufer verwenden. – SayeedHussain