Wie kann ich ein Objekt mit einem Block Completion Handler unter ARC freigeben?

9

Es ist ein gängiges Muster in meinem Code, ein Objekt zuzuordnen, es mit einem Completion-Handler zu erledigen und es im Handler freizugeben:

%Vor%

Das funktioniert ziemlich gut, aber wenn ich versuche, den Code in ARC umzuwandeln, beschwert sich Xcode zu Recht darüber, dass es nicht einfach den autorelease aus dem Block fallen lassen kann, da das foo -Objekt nach dem Verlassen deallokiert würde der Umfang.

Was ist also ein guter Weg, um diese Art von Mustern unter ARC zu schreiben? Ich könnte eine Instanzvariable für foo einführen:

%Vor%

... aber der Code wäre nicht mehr einspringend.

    
zoul 04.01.2012, 08:17
quelle

1 Antwort

4

In den meisten Fällen sollte es funktionieren (d. h., wenn etwas auf sich selbst innerhalb von foo verweist, wird foo lange genug dauern, um diesen Code zu erfüllen, bevor er weggeht). Wenn es Probleme mit schwachen Referenzen gibt und foo so aussieht, als sollte es weggehen, sollte es aber erst nach dem Ausführen des Handlers sein, können Sie etwas tun wie:

%Vor%

Beachten Sie, dass dies das Gegenteil dieses Musters ist, das dazu führt, dass das Objekt / not / unter verwalteten Speicherregeln erfasst wird.

    
Jason Coco 04.01.2012, 08:34
quelle