Objective-C: Sicheres Verwenden der Speicherverwaltung für asynchrone Methoden

8

Ich muss eine Methode aufrufen, die einen asynchronen Code startet

%Vor%

Jetzt kann ich es nicht einfach freigeben, da dies zu einem Fehler führen würde, da der Code noch läuft:

%Vor%

Was ist der beste Weg, um mit dem Speicher umzugehen?

    
Robert 23.04.2010, 12:50
quelle

4 Antworten

4

Sie könnten - [MyClass startAsynchronousCode] einen Callback aufrufen:

%Vor%

und dann instanziieren Sie eine MyClass wie folgt:

%Vor%

myCallback könnte so aussehen:

%Vor%     
Frank Shearar 23.04.2010, 13:16
quelle
3

Wie rufen Sie den asynchronen Code auf? Wenn Sie NSThread + detachNewThreadSelector: toTarget: withObject: , Sie werden feststellen, dass das Zielobjekt vom Thread beibehalten wird, bis es beendet und dann freigegeben wird. So können Sie das Objekt sofort nach der asynchronen Nachricht freigeben.

z.B.

%Vor%

Mit dem obigen ist der folgende Code vollkommen sicher:

%Vor%     
JeremyP 23.04.2010 14:19
quelle
1

Sie müssen Ihr myClass-Objekt intern in der startAsynchronousCode-Methode beibehalten. Und geben Sie es intern auch nach dem Beenden frei.

Dieses Verhalten wird in NSURLConnection, UIAlertView und anderen asynchronen Objekten verwendet.

    
Skie 23.04.2010 14:18
quelle
0

Was ich immer getan habe, ist eine Instanzvariable, die auf das asynchrone Objekt verweist.

%Vor%     
kubi 23.04.2010 13:38
quelle