dispatch_queue_t muss mit dispatch_release () freigegeben werden?

7

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:

%Vor%

Stimmt das? Muss ich sie hier veröffentlichen?

    
Nic Hubbard 23.02.2012, 23:04
quelle

2 Antworten

8

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.

    
jkh 24.02.2012, 05:15
quelle
13

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.

    
rsez 23.02.2012 23:08
quelle