2010-07-29 3 views
8

Я используюв приложении для iPhone, и интерфейс, кажется, замедляется после отправки initWithRequest: в мой NSURLConnection экземпляр. Я не уверен, что это происходит потому, что мой код обработки занимает много времени, чтобы обработать ответ, или если это потому, что NSURLConnection блокирует основной поток.Блокирует ли NSURLConnection основной поток?

Может ли кто-нибудь подтвердить, что NSURLConnection создаст соединение и ждет данных в отдельном потоке, а затем вызовет его методы делегирования в основном потоке?

Спасибо!

ответ

10

NSURLConnection поддерживает два режима работы: асинхронный и синхронный. Ни один из них не использует отдельные потоки. Они используют только один поток, который является тем потоком, в котором вы их запускаете.

В синхронном режиме NSURLConnection будет блокировать любой поток, в котором вы его запускаете. Асинхронный режим использует цикл выполнения для ведения (с точки зрения разработчика) аналогично фоновый поток, но с более низкими накладными расходами и без каких-либо проблем с обеспечением безопасности потоков. Если вы используете асинхронный режим, вы хотите запустить его в основном потоке. Он ничего не будет блокировать.

Если ваш интерфейс замедляется, это не согласуется с синхронным использованием NSURLConnection, что вместо этого приведет к тому, что ваш интерфейс полностью остановится, пока запрос не будет завершен.

+5

Вы должны быть осторожны с последним предложением! если у вас есть, например, 5000 небольших запросов, пользовательский интерфейс CAN может заключаться в том, что интерфейс замедляется (из-за большого количества небольших остановок), который у меня был недавно – Tomen

+2

Использование NSURLConnection асинхронно создает поток, внутренний. Это определение асинхронное. – malhal

-1

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

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