이 다소 특이한 중첩 시퀀스가있는 코드를 상속했습니다. 일반적인 패러다임은 UI를 업데이트하기 위해 기본 대기열로 단일 발송을해야합니다. 아래에 표시된 코드는 메인 큐에 대한 다른 디스패치 내의 메인 큐로의 디스패치를 중첩합니다.dispatch_async (dispatch_get_main_queue()^{}) 중첩의 목적은 무엇입니까?
- (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
}
});
}
중첩의 목적은 무엇입니까? dispatch_async(dispatch_get_main_queue()
? 이 중첩 된 시퀀스는 앱의 여러 위치에 표시됩니다. 메인 큐에 단 하나의 디스패치 만 필요하다는 것은 나에게 보인다.
여기 관련된 주제에 관한 모든 질문을 Google 검색을 통해 읽었지만 두 가지 동일한 발송을 중첩하는 제안을 찾지 못한 사람은 없습니다.
위의 예제와 코드의 다른 위치에서 예상대로 UI를 업데이트하면 앱이 잘 작동합니다.
대부분의 앱 코드는 위의 구성표의 중첩되지 않은 버전을 사용하며, 물론 정상적으로 작동합니다.
이 중첩 호출을 단일 발송으로 바꾸고 싶지만 여기에 뭔가 빠졌을 수도 있습니다. 어떤 조언을 주시면 감사하겠습니다.