Что я должен использовать для параллелизации частых HTTP-запросов на сервер REST в приложении iOS: GCD или NSThread?

Я разрабатываю приложение, которое должно извлекать новые сообщения для пользователя с сервера. Я реализовал это как таймер, который срабатывает каждые 2 секунды и вызывает селектор, который является методом, реализующим HTTP-запрос и обработку ответа сервера. Поэтому я думаю, что это довольно плохая идея сделать это в основной теме.

У меня нет опыта многопоточности в iOS. Поэтому я хочу знать, что подходит для распараллеливания этой задачи: GCD или NSThread?

Вы должны работать как можно ближе к стеке API. Таким образом, вы можете сосредоточиться на функциональности программирования и не управлять потоками. GCD использует потоки, которые система все равно собирается, и намного эффективнее, чем управление собственным кодом. Еще лучше попытаться инкапсулировать вашу сеть в  `NSOperation`  s, который затем можно поместить на  `NSOperationQueue` , и они будут выполняться на одном или нескольких фоновых потоках, независимо от того, что система считает является хорошим числом для текущего состояния власти и других подобных вещей.

Преимущество  `NSOperation`  над чистым подходом GCD заключается в том, что операции можно отменить. Как только блок привязан к GCD, он должен работать независимо от того, что.

Если вы хотите инкапсулировать ваши HTTP-запросы в  `NSOperation` , вам может быть интересно узнать, что кто-то уже сделал это для вас.  [`AFNetworking`](https://github.com/AFNetworking/AFNetworking)   [является одним из наиболее популярных сетевых стеков](https://github.com/AFNetworking/ AFNetworking ) [iOS](/tag5122) и использует  `NSOperation`  s как основу для построения и, как таковой, очень легко многопоточную.

Хорошей идеей было бы попытаться инкапсулировать ваш синтаксический код в  `NSOperation` , а затем, когда ваши операции с сетевым запросом возвратятся, вы можете создавать экземпляры операций синтаксического анализа и помещать их в другую очередь для обработки в фоновом режиме.