Ich habe zwei GCD
Blöcke, die asynchron sind. Der erste ist für den Hintergrundthread, der zweite für den Hauptthread. Das funktioniert großartig, aber ich habe gerade irgendwo gesehen, dass ich sie vielleicht mit dispatch_release()
freigeben muss. Zum Beispiel:
Stimmt das? Muss ich sie hier veröffentlichen?
Nur von Ihnen erstellte Warteschlangen freigeben; Geben Sie die Hauptwarteschlange oder die globalen gleichzeitigen Warteschlangen nicht frei (oder auch keine, die Sie nicht selbst erstellt haben). Es ist auch keine gute Idee, das Release innerhalb des Arbeitsblocks zu verschachteln, der in dieser Warteschlange eingereiht ist, wie Sie es tun, weil dies im falschen Bereich geschieht und dies:
%Vor% Funktioniert nicht, wenn Sie später den Code ändern, um den 2. dispatch_async()
hinzuzufügen. Die Paarung Ihrer Create / Release-Aufrufe im selben Umfang ist eine bessere stilistische Wahl, vorausgesetzt, dass Sie dies können.
Sie müssen nur die mit dispatch_queue_create
erstellte Warteschlange freigeben. Die Hauptwarteschlange wird immer vorhanden sein, und es ist nicht sinnvoll, sie freizugeben.
Alle Blöcke, die zur Warteschlange hinzugefügt wurden, behalten die Warteschlange selbst bei, sodass Sie dispatch_release(queue)
nach Ihrem dispatch_async
-Aufruf sicher aufrufen können. Am besten außerhalb des Blocks nach dem Code, den Sie hier geschrieben haben.
Tags und Links objective-c ios grand-central-dispatch objective-c-blocks