Делегат NSURLConnection вызывается в главном потоке на iOS 5

Я обновляю свое приложение для iPhone, которое имеет функцию загрузки контента, используя связь Http. Раньше событие происходило в основном потоке, а функции NSURLConnectionDelegate вызывались в другом потоке на iOS 4. Но когда я тестировал тот же код на iOS 5, я обнаружил, что функции NSURLConnectionDelegate были вызваны в главном потоке.

Я не использовал NSURLConnection sendSynchronousRequest:, но initWithRequest:.

Apple обновила эту часть NSURLConnection в iOS 5?

2 ответа

Решение

NSURLConnection есть несколько новых методов в iOS 5, например sendAsynchronousRequest: ...так что да, они обновили его каким-то образом.

Чтобы исправить это вы можете использовать

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait

в вашем методе делегата или просто отправьте в нужную очередь.

Документы утверждают:

Если вы не запланировали подключение в цикле выполнения или очереди операций до вызова этого метода, подключение запланировано в текущем цикле выполнения в режиме по умолчанию.

На какой нити ты -start твоя связь?

Попробуй завернуть [connection startImmediately:YES] в dispatch_async(myThreadQueue ...) вызов.

Если вы пройдете YES в startImmediately, затем методы делегата вызываются в текущем цикле выполнения. Если вы делаете это из основного потока, то это основной цикл выполнения.

Однако, если вы просто сдадите NO и вручную start запрос, то методы делегата будут выполняться в другом потоке (не в основном потоке).

Другие вопросы по тегам