Всегда ли закрытия обработчиков завершения выполняются в фоновом потоке? - PullRequest
0 голосов
/ 24 августа 2018

Закрытие обработчика завершения является распространенным явлением в iOS, например, dataTask(with:completionHandler:) в URLSession классе.

Механизм пользовательского интерфейса управляется основным потоком, вызовы API через URLSessionзапускаться в фоновом потоке и должен быть отправлен в основной поток, если в обработчике требуется обновление пользовательского интерфейса.

Вопрос 1 : все ли закрытия обработчиков завершения из платформы iOS запускаются в фоновом потоке?

Вопрос 1.1 : Все ли экранирующие закрытия,например, созданный разработчиками, запускаемый в фоновом потоке?

Question2 : я видел до 8 потоков в симуляторе iPhone X.Какой из них является основным потоком, а какой - фоновым потоком в ios?У них разные приоритеты и вычислительная мощность?

1 Ответ

0 голосов
/ 24 августа 2018

Имейте в виду, что вы действительно спрашиваете об очередях и потоках больше, чем обработчики завершения и замыкания.Код любого типа выполняется в очереди (которая состоит из одного или нескольких потоков).В этом отношении нет ничего особенного в закрытиях обработчиков завершения.

Q1 - Большинство iOS SDK предоставляют обработчики завершения, вызываемые в фоновой очереди, но не делайте этого предположения, если в документации не указано, в какую очередь они вызваны,Даже URLSession можно настроить для работы в определенной очереди, включая основную очередь.

Q1.1 - Написанные вами замыкания выполняются в любой очереди, из которой вы их вызываете.Нет волшебства, которое заставляет их работать в фоновой очереди.

Q2 - Первый поток всегда является единственным потоком основной очереди.Все остальные темы из фоновых очередей.Каждый поток может иметь любой приоритет, который был назначен на основе свойств его очереди.

Для получения более подробной информации вы должны просмотреть документацию Dispatch , особенно DispatchQueue.

...