2013-08-01 27 views
19

Ở nhiều nơi trong ứng dụng của tôi, tôi sử dụng mã tiếp theo để thực hiện nhiệm vụ nền và báo cho các chủ đề chính:tạo một hàng đợi công văn toàn cầu tùy chỉnh tuần tự

dispatch_queue_t backgroundQueue = dispatch_queue_create("dispatch_queue_#1", 0); 
    dispatch_async(backgroundQueue, ^{ 

    dispatch_async(dispatch_get_main_queue(), ^{ 


     }); 
    }); 

Có thể tạo ra một backgroundQueue ở một nơi (nơi cách tốt nhất?) và sử dụng nó sau này? Tôi biết về hàng đợi toàn cầu của hệ thống, nhưng việc đặt hàng là quan trọng đối với tôi.

Trả lời

34

Something như thế này sẽ làm việc tốt:

dispatch_queue_t backgroundQueue() { 
    static dispatch_once_t queueCreationGuard; 
    static dispatch_queue_t queue; 
    dispatch_once(&queueCreationGuard, ^{ 
     queue = dispatch_queue_create("com.something.myapp.backgroundQueue", 0); 
    }); 
    return queue; 
} 
+0

bạn có thể thêm ví dụ về việc sử dụng không? – pvllnspk

+0

Chắc chắn: dispatch_async (backgroundQueue(),^{NSLog (@ "Đã đăng nhập trên hàng đợi nền!"}); –

+0

không thể biên dịch mã của bạn trong câu trả lời – pvllnspk

0

Bạn có thể cũng chúng tôi một NSOperationQueue và đẩy hoạt động đến nó. Để đảm bảo các hoạt động không chạy hết trật tự, bạn có thể đặt isConcurrent thành NO.

+0

nó không phải là trường hợp của tôi – pvllnspk

-5
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
       //back ground thread 

       dispatch_async(dispatch_get_main_queue(), ^{ 
        // main thread 
         }); 
       }); 
0
queue = dispatch_queue_create("com.something.myapp.backgroundQueue", 0); 

trước là nối tiếp Queue, nếu bạn muốn tạo hàng đợi đồng thời, bạn có thể sử dụng DISPATCH_QUEUE_CONCURRENT.

Trong iOS 5 trở lên, bạn có thể tạo hàng đợi công văn đồng thời bằng cách chỉ định DISPATCH_QUEUE_CONCURRENT làm loại hàng đợi.

dispatch_queue_t queue = dispatch_queue_create("downLoadAGroupPhoto", 
                DISPATCH_QUEUE_CONCURRENT);