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:
... aber der Code wäre nicht mehr einspringend.
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.
Tags und Links objective-c objective-c-blocks memory-management automatic-ref-counting