Сначала поймите его брата dispatch_async
//Do something
dispatch_async(queue, ^{
//Do something else
});
//Do More Stuff
Вы используете dispatch_async
для создания новой темы.Когда вы это сделаете, текущий поток не остановится.Это означает, что //Do More Stuff
может быть выполнено до //Do something else
finish
Что произойдет, если вы хотите остановить текущий поток?
Вы вообще не используете dispatch.Просто напишите код как обычно
//Do something
//Do something else
//Do More Stuff
Теперь, скажем, вы хотите что-то сделать в потоке DIFFERENT и все же подождать, как будто и убедиться, что все выполнено последовательно .
Есть много причин для этого.Например, обновление пользовательского интерфейса выполняется в главном потоке.
Здесь вы используете dispatch_sync
//Do something
dispatch_sync(queue, ^{
//Do something else
});
//Do More Stuff
Здесь вы получаете //Do something
//Do something else
и //Do More stuff
последовательнохотя //Do something else
выполняется в другом потоке.
Обычно, когда люди используют другой поток, вся цель состоит в том, чтобы что-то могло быть выполнено без ожидания.Скажем, вы хотите загрузить большой объем данных, но хотите, чтобы пользовательский интерфейс был гладким.
Следовательно, dispatch_sync используется редко.Но это там.Я лично никогда не использовал это.Почему бы не попросить пример кода или проекта, который использует dispatch_sync.