Was ist der richtige Weg, um ein NSError outparam innerhalb eines Autorespulepool-Blocks zu setzen?

8

Ich habe eine Methode wie folgt:

%Vor%

Dies ist kaputt und stürzt ab, weil der NSError automatisch freigegeben wird und wenn die Rückgabe erfolgt, wird der Pool leer, so dass die Sache, die der Aufrufer bekommt, jetzt falsch ist.

Ich weiß, dass ich die Methode erheblich umgestalten konnte, sodass ich alle Fehlerfälle außerhalb des Autorelease-Blocks sammle, aber ich möchte verstehen, ob es in dieser Situation einen korrekten Umgang mit dem Fehlerobjekt gibt. Ich kann einen spekulativen NSError nicht außerhalb des Poolblocks zuweisen / initialisieren, da die Domänen- und Codeeigenschaften schreibgeschützt sind (und ich denke immer noch, dass der Verweis verschwinden würde, wenn die Methode zurückkehrt).

Es löst das Problem, wenn ich die Methodendeklaration zu diesem ändern:

%Vor%

Aber dann muss ich auf der Call-Seite in einer nicht standardmäßigen Art und Weise herumärgern, und das scheint ungeheuerlich zu sein, dass der Anrufer den Preis für meinen internen Autorespulepool zahlt.

Irgendwelche Gedanken? Danke.

    
Ben Zotto 23.01.2013, 21:44
quelle

1 Antwort

7

Ich hatte dieses Problem selbst. In diesem Fall denke ich, dass Sie einfach eine neue starke Referenz direkt vor dem @autoreleasepool deklarieren und das Methodenargument direkt hinter dem @autoreleasepool -Block von dieser temporären Referenz setzen müssen.

%Vor%

(im Browser eingegeben, nicht vom Compiler überprüft)

Was Ihre vorzeitige Rückkehr betrifft, so denke ich, dass Sie eine Sprungmarke verwenden müssen (auch wenn es nicht hübsch ist).

    
Erik Aigner 23.01.2013, 21:50
quelle