Objective C의 일반적인 패턴은 백그라운드 스레드에서 약간의 코드를 실행 한 다음 메인 스레드로 돌아가서 UI를 조정하는 것입니다. 코드는 메인 스레드에서 시작하면, 내가 너무 같은 패턴이 공격 것 :백그라운드로 코드를 보내고, 기다리지 않고, 차단하지 않고 주 스레드로 돌아 간다?
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self someBackgroundTask];
dispatch_async(dispatch_get_main_queue(), ^{
[self someUITask];
});
});
그러나,이 그것을 할 수있는 정말 어설픈 방법처럼 보인다 아닌 이상에서이 두 가지 수준을 생성하기 때문에 그 느낌이 불필요하게 중첩됩니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 이 경우 UI 코드는 백그라운드 작업 완료에 의존하므로 첫 번째 디스패치 후에 삭제할 수 없습니다.
메인 스레드에서 someUITask를 실행하도록 NSThread에 요청할 수 있습니다. 그러나 그것은 정말 지저분 해집니다. 일반적으로 블록이 좋습니다. 또한 블록은 NSThread보다 100 배 더 빠른 것입니다. –
은 _GCD_를 사용하는 올바른 방법으로 보이지만 아무 것도 필요하지 않습니다. 실제 문제는 무엇입니까? – holex