Делегат 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
запрос, то методы делегата будут выполняться в другом потоке (не в основном потоке).