Tôi nghĩ bạn đang thiếu điểm hoạt động không đồng bộ. Và nhận xét của RobertRyan về cập nhật giao diện người dùng không hiển thị nhanh nếu được thực hiện trên hàng đợi phụ là sai. Tất cả các cập nhật giao diện người dùng cần được thực hiện trên hàng đợi chính. Giai đoạn.
Nhưng quay lại GCD và hàng đợi không đồng bộ. @Sven đúng là bạn không thể thay đổi mức ưu tiên của hàng đợi công văn. Hàng đợi trong GCD hoạt động theo kiểu FIFO (First In First Out), do đó thứ tự bạn xếp hàng là thứ tự chúng được thực hiện. Đây là một phần lý do tại sao sử dụng GCD là an toàn luồng; bạn được đảm bảo rằng bạn sẽ không gặp phải bất kỳ vấn đề nào vì ưu tiên hàng đợi FIFO này. Điều thứ hai cần hiểu là khi bạn dispatch_async một hàng đợi, hệ điều hành sẽ không đảm bảo khi hàng đợi đó được xử lý. Đó là một loại nó-và-quên nó loại quá trình. Nếu bạn cần biết khi hàng đợi được xử lý xong, bạn cần thiết lập trình xử lý khối hoàn thành (bạn sẽ nhận thấy nhiều Khung công tác của Apple đã bắt đầu thực hiện điều này) để được thông báo về điều đó. Đây là lý do tại sao Apple đề nghị lồng một cuộc gọi dispatch_async trong cuộc gọi dispatch_async đầu tiên của bạn và yêu cầu chủ đề chính cho cập nhật giao diện người dùng. Vì vậy, mã của bạn sẽ giống như thế này:
dispatch_async(q, ^{
[self performHeavyCalculations];
dispatch_async(dispatch_get_main_queue, ^{
// some UI updates
});
});
Do cách GCD enqueues và dequeues, dispatching cập nhật giao diện người dùng của bạn asyncronously trở lại hàng đợi chính sẽ cho phép cập nhật giao diện người dùng để xảy ra mà không có một sự trì hoãn cảm nhận được cho người dùng. Nếu cập nhật giao diện người dùng của bạn phụ thuộc vào kết quả của performHeavyCalculations, bạn sẽ cần thiết lập trình xử lý hoàn thành hoặc lược đồ ủy quyền để thông báo cho hàng đợi chính khi quá trình này hoàn tất để cập nhật có thể xảy ra. Nếu độ trễ giữa các phép tính và bản cập nhật quá dài, bạn có thể cần xem xét những gì bạn đang làm trong phương pháp tính toán mất quá nhiều thời gian.
UIKit chắc chắn nhất đã KHÔNG ** trở thành chủ đề trong iOS 4. Bạn đã nghe thấy ở đâu trên thế giới ?? –
Họ nói rằng tại WWDC. Tôi chắc chắn là 60%. –
Tôi chắc chắn 100% là không. Đó là * không bao giờ * an toàn để sửa đổi giao diện người dùng của bạn từ bất kỳ chủ đề nào khác ngoài chuỗi chính. –