Делегат NSURLConnection вызывается в главном потоке на iOS 5 - PullRequest
1 голос
/ 27 февраля 2012

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

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

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

Ответы [ 2 ]

0 голосов
/ 14 марта 2013

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

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

0 голосов
/ 27 февраля 2012

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

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

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

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

Состояние документов:

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

В какой теме вы -start подключились?

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

...