Tôi đã thừa hưởng một số mã có chuỗi lồng nhau không bình thường này. Mô hình thông thường sẽ có một công văn duy nhất đến hàng đợi chính để cập nhật giao diện người dùng. Mã, được hiển thị bên dưới, tổ chức một công văn đến hàng đợi chính trong một công văn khác đến hàng đợi chính.Mục đích của nesting dispatch_async (dispatch_get_main_queue()^{}) là gì?
- (void)viewDidLoad
{
// Setup some data
// Adjust UI
dispatch_async(myBackgroundQueue, ^{
while(Do_some_time_consuming_work) {
// Time consuming work goes here
if (things_are_going_slowly) {
dispatch_async(dispatch_get_main_queue(), ^{ // <- one of these two seems redundant
dispatch_async(dispatch_get_main_queue(), ^{ // <- one of these two seems redundant
stillWorkingLabel.hidden = NO; //Let user know the work is still ongoing
});
});
)
// Finish time-consuming work
}
});
}
Mục đích, nếu có, làm tổ dispatch_async(dispatch_get_main_queue()
là gì? Chuỗi lồng nhau này hiển thị ở một số vị trí trong ứng dụng. Dường như với tôi rằng chỉ có một công văn đến hàng đợi chính là cần thiết.
Tôi nghĩ tôi đã đọc tất cả các câu hỏi liên quan về các chủ đề liên quan tại đây và thông qua tìm kiếm của Google, nhưng tôi chưa tìm thấy ai đề xuất lồng hai công văn giống hệt nhau.
Ứng dụng hoạt động tốt, với giao diện người dùng cập nhật như mong đợi trong ví dụ trên và ở những nơi khác trong mã.
Hầu hết mã của ứng dụng sử dụng phiên bản không lồng nhau thông thường của sơ đồ trên và dĩ nhiên nó cũng hoạt động tốt.
Tôi có xu hướng chỉ thay thế các cuộc gọi lồng nhau này bằng một công văn duy nhất, nhưng có thể tôi đang thiếu thứ gì đó ở đây. Lời khuyên nào sẽ được đánh giá cao.