2014-10-14 9 views
0

Я работаю над приложением, в котором я потребляю много веб-сервисов, есть определенная задача, для которой мне нужно выполнить несколько запросов async одновременно, и я немного смущен, когда я спрашиваю, как i хотите сделать эту задачу оптимальным способом, поскольку веб-служба требует времени во время выполнения. Задача состоит в одновременном выполнении нескольких запросов async и возврате ответа на Main с помощью обратного вызова. Поэтому я хочу знать, что я должен использовать для такой задачи, например GCD, NSOperation или AFNetworking?Выполнение нескольких асинхронных запросов одновременно

Как создать структуру для выполнения такой задачи.

Пожалуйста, помогите мне в этом.

+0

Я бы использовал NSURLSession где-то там, потому что он автоматически объединяет соединения. –

+0

@MarcusAdams какой-нибудь пример? также имейте в виду, что я хочу выполнить 3 запроса одновременно, не дожидаясь, и после любого завершения выполнения запроса я хочу вернуть ответ на главный поток, используя обратный вызов. –

ответ

3

Я лично об этом поработаю, используя NSOperation. Это не займет много времени, и если это действительно единственная сеть, которую вы будете делать AFNetworking, возможно, перебор.

Это, если вам не подходит NSOperation или NSURLConnection, то AFNetworking может быть путем.

На мой взгляд:

NSOperation = супер легкий вес и выполняет свою задачу на "Т".

AFNetworking = что вам нужно плюс 100 других вещей, которые вам не нужны.


Per комментарий:

Пример выполнения 3 запроса без зависимости друг с другом может быть сделано с NSOperation, как это (псевдо):

NSOperationQueue *myQueue....create NSOperationQueue 

FetchProfilePictureOperation *fetchPictureOperation.....Sublcass of NSOperation 
fetchPictureOperation.completionBlock = ^{ 
    dispatch_async(dispatch_get_main_queue(),^{ 
     NSLog("fetchPictureOperation Completed"); 
    }); 
}; 

FetchProfileIconOperation *fetchIconOperation....Subclass of NSOperation 
fetchIconOperation.completionBlock = ^{ 
    dispatch_async(dispatch_get_main_queue(),^{ 
     NSLog("fetchIconOperation Completed"); 
    }); 
}; 


FetchProfileDetailsOperation *fetchDetailsOperation....Subclass of NSOperation 
fetchDetailsOperation.completionBlock = ^{ 
    dispatch_async(dispatch_get_main_queue(),^{ 
     NSLog("fetchDetailsOperation Completed"); 
    }); 
}; 


[myQueue addOperation: fetchPictureOperation]; 
[myQueue addOperation: fetchIconOperation]; 
[myQueue addOperation: fetchDetailsOperation]; 

Here is a reference к NSOperation от парня, который написал AFNetworking, что полезно.

+0

спасибо за ваш быстрый ответ, но можете ли вы объяснить, что вы имели в виду только через сеть, а также можете ли вы дать мне пример выполнения трех запросов одновременно, не дожидаясь другого запроса? –

+1

Я обновил свой комментарий. По * единственной сети * Я предполагал, что у вас было несколько запросов, которые будут сделаны в тандеме. Например, когда загружается профиль пользователя, вы делаете несколько запросов для изображения профиля, деталей, значков и т. Д. Если вы создаете 'POST',' PUT', 'GET' и т. Д. Повсюду, то, возможно, идет с' AFNetworking' это правильный выбор. – random

+0

большой чувак. Остается только один вопрос, но как отправить ответ на главный поток, используя обратный вызов после запроса. –

0

Взгляните на NSURLConnection и NSURLSession.

NSURLConnection имеет как синхронные, так и асинхронные методы. Если вам просто нужно «Дайте мне знать, когда это будет сделано» тип асинхронной, есть удобный новый метод класса + sendAsynchronousRequest: очереди: completionHandler:

Вы передаете ему NSURLRequest, и блок кода для выполнения, когда он завершает , Очень проста в использовании.

NSURLSession является новым в iOS 7 и позволяет создавать группы действий и управлять ими, как диспетчер загрузки. Я читал об этом, но у меня не было возможности использовать его еще.

Существует также сторонняя библиотека AFNetworking, которая предоставляет простые в использовании обертки с использованием вышеперечисленного и другие сервисы.

В любом случае вам не нужно использовать GCG или NSOperation. Классы NSURLConnection и NSURLSession управляют асинхронными службами для вас и более эффективны, чем сами.

+0

спасибо за ваш ответ, но как я могу использовать NSURLConnection для выполнения трех запросов 3 одновременно, и как только запрос будет завершен, ответ должен быть возвращен в Основной поток с использованием обратного вызова. Можете ли вы представить какой-либо пример для этого. –

+0

Прочитайте документы по методу, который я опубликовал, + sendAsynchronousRequest: queue: completHandler '. Он выполняется асинхронно и выполняет ваш блок завершения в любой очереди, которую вы предоставляете. –

Смежные вопросы