Не думаю, что было бы неплохо использовать отдельный поток для обработки связи. Помимо того, что это сложно, в этом нет необходимости, поскольку NSURLConnection/NSURLRequest
позволяет вам обрабатывать связь асинхронно, то есть без блокировки.
Подробно, вы можете создать NSURLRequest , выполнив:
NSURLRequest* yourReq = [NSURLRequest requestWithURL:yourURL];
затем создайте NSURLConnection с:
NSURLConnection* yourConnection = [NSURLConnection connectionWithRequest:yourReq delegate:yourDelegate];
и начните с:
[yourConnection start];
Когда данные будут готовы, будет вызван один из методов для вашего делегата (connectionDidFinishLoading:
или connection:didFailWithError:
), чтобы вы могли обновить свой пользовательский интерфейс.
Все это без блокировки.
Еще лучшей альтернативой использованию NSURLConnection/NSURLRequest
является использование ASIHTTPRequest , которое кажется более устойчивым в управлении памятью, а также предлагает отличный механизм кэширования.
РЕДАКТИРОВАТЬ: если вас беспокоит то, что, будучи вашей моделью-одиночкой, у вас не может быть делегата, позвольте мне предложить вам подробнее изучить этот вопрос.
Ваша модель может быть одноэлементной, и делегат по вашему запросу может не иметь ничего общего с моделью, кроме знания того, как получить к ней доступ (что довольно просто, если модель является одиночным).
Это возможно несколькими механизмами с NSURLConnection
, но если вы используете ASIHTTPRequest
, это станет действительно просто, потому что у каждого ASIHTTRequest
может быть свой делегат.