die Verwendung von grand central dispatch innerhalb der Klassenmethode führt zu einem Speicherleck

8

Ich erhalte ein Speicherleck, wenn der View-Controller meine Modellklassenmethode in der Zeile aufruft, in der ich meine gcd-Warteschlange erstelle. Irgendwelche Ideen?

%Vor%     
prostock 23.03.2011, 20:32
quelle

2 Antworten

18

Sie sollten es zu ...

ändern %Vor%

... Sie sollten dispatch_release aufrufen, wenn Sie keinen Zugriff mehr auf die Warteschlange benötigen. Und da myQueue eine lokale Variable ist, muss dort aufgerufen werden.

Lesen Sie die Dokumentation dispatch_queue_create:

Diskussion

Blöcke, die an die Warteschlange übergeben werden, werden nacheinander in FIFO-Reihenfolge ausgeführt. Beachten Sie jedoch, dass Blöcke, die an unabhängige Warteschlangen übergeben werden, gleichzeitig ausgeführt werden können.

Wenn Ihre Anwendung die Dispatch-Warteschlange nicht mehr benötigt, sollte sie mit der Funktion dispatch_release freigegeben werden. Alle ausstehenden Blöcke, die an eine Warteschlange gesendet werden, enthalten einen Verweis auf diese Warteschlange, sodass die Zuweisung der Warteschlange erst aufgehoben wird, wenn alle ausstehenden Blöcke abgeschlossen wurden.

    
robertvojta 23.03.2011, 20:51
quelle
4

Das Leak-Tool meldet, wo Speicher zugewiesen wird, der keine Referenzen mehr von Ihrem Code enthält.

Nachdem diese Methode ausgeführt wurde, da es keinen Verweis auf die von Ihnen erstellte Warteschlange gibt und dispatch_lease () nie aufgerufen wurde, wird sie als Leck betrachtet.

    
quelle