0
我想依次執行2個塊,其中每個塊都是異步執行的。GCD - 如何在主線程上等待主隊列上執行的異步回調
例如
[someMethodWithCompletionHandler:^() {
// do something in the completion handler
}];
[anotherMethodWithCompletionHandler:^ {
// do something else in the completion handler after the first method completes
}];
現在,我需要「anotherMethodWithCompletionHandler
」之後「someMethodWithCompletionHandler
」的情況發生完成(包括其完成處理)
經常我會創造一個dispatch_group
並等待在2種方法(我不能在另一個完成處理程序中嵌套2個方法,因爲它需要很多代碼才能移動)
但問題是第一個完成處理程序塊i s在主線程中調用(通過方法本身調用主線程中的塊),所以我無法有效地創建阻塞主線程的dispatch_group
。
所以線程的狀態看起來像這樣
// main thread here
[self doFirstPortionOfWork];
// main thread here
[self doSecondPortionOfWork];
-(void)doFirstPortionOfWork
{
.. a lot of stuff happening
[someMethodWithCompletionHandler:^{
// this is the main thread
}];
// would like to block the return here until the completion handler finishes
}
-(void)doSecondPortionOfWork
{
... a lot of work here
[anotherMethodWithCompletionHandler^{
// this is also called into the main thread
}];
// would like to block the return here until the completion handler finishes
}
所以,我怎麼能這樣跟了訴諸了很多嵌套的方法和能夠阻止主線程,直到所有的完成?
我不能這樣做,因爲我沒有嵌套 –
我不明白你的意思是「_I沒有nesting_什麼」。 – Tricertops