1

Http 통신을 사용하여 콘텐츠 다운로드 기능이있는 iPhone 응용 프로그램을 업그레이드하고 있습니다. 메인 스레드에서 발생하는 이벤트와 iOS 4의 다른 스레드에서 NSURLConnectionDelegate 함수를 호출하는 데 사용되었습니다. 그러나 iOS 5에서 동일한 코드를 테스트했을 때 NSURLConnectionDelegate 함수가 주 스레드에서 호출 된 것을 발견했습니다 .하지만 initWithRequest :NSURLConnection 대리인이 iOS 5의 주 스레드에서 호출되었습니다.

나는 있는 NSURLConnection sendSynchronousRequest를 사용하지 않았다.

Apple에서 iOS 5의 NSURLConnection 부분을 업그레이드 했습니까?

답변

0

NSURLConnection에는 iOS 5에서 몇 가지 새로운 방법이 있습니다. sendAsynchronousRequest: ..., 그래서 그들은 그것을 어떤 방법으로 업데이트했습니다.

당신이 당신의 대리자 메서드에

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

를 사용할 수 있습니다를 해결하거나 권리 큐에 파견합니다.

워드 프로세서 상태 :

당신이 실행 루프 또는 작업 큐에서 연결을 예약하지 않으면이 메서드를 호출 전에 연결이 기본 모드에서 현재 실행 루프 예정이다.

어떤 스레드에서 -start 연결 했습니까?

[connection startImmediately:YES]dispatch_async(myThreadQueue ...) 전화로 포장 해보세요.

+0

** startImmediately : YES **를 사용합니다. 즉, 메인 스레드에 있습니다. – Yun

+0

해봤지만 NSURLConnectionDelegate 함수는 호출되지 않습니다. – Yun

-1

YESstartImmediately으로 전달하면 현재 실행 루프에서 대리자 메서드가 호출됩니다. 주 스레드에서이 작업을 수행하면 주 실행 루프가됩니다.

그러나 단순히 NO을 전달하고 start을 수동으로 요청하면 대리자 메서드가 주 스레드가 아닌 다른 스레드에서 실행됩니다.