2010-07-29 7 views
8

iPhone 응용 프로그램에서 NSURLConnection을 사용하고 있는데 initWithRequest:NSURLConnection 인스턴스로 보낸 후 인터페이스가 느려진 것 같습니다. NSURLConnection이 주 스레드를 차단하고 있기 때문에 처리 코드가 응답을 처리하는 데 오랜 시간이 걸리므로이 문제가 발생하는지 잘 모르겠습니다.NSURLConnection이 메인 스레드를 차단합니까?

누구나 NSURLConnection이 연결을 만들고 별도의 스레드에서 데이터를 기다린 다음 주 스레드에서 대리인 메서드를 호출 할 수 있는지 확인할 수 있습니까?

감사합니다.

답변

10

NSURLConnection은 비동기 및 동기라는 두 가지 작업 모드를 지원합니다. 둘 다 별도의 스레드를 전혀 사용하지 않습니다. 둘 다 스레드를 하나만 쓰면됩니다.

동기 모드에서 NSURLConnection은 실행하는 모든 스레드를 차단합니다. 비동기 모드는 실행 루프를 사용하여 (개발자의 관점에서) 실행 루프를 사용하여 백그라운드 스레드이지만 오버 헤드가 적고 스레드 안전성 문제가 없습니다. 비동기 모드를 사용하는 경우 주 스레드에서 실행해야합니다. 그것은 아무것도 막지 않을 것이다.

인터페이스가 느려지는 경우 NSURLConnection을 동 기적으로 사용하는 것과 일관되지 않습니다. 그러면 요청이 완료 될 때까지 인터페이스가 완전히 중지됩니다.

+5

마지막 문장에주의해야합니다. 예를 들어 5000 개의 작은 요청이 있다면 사용자 경험을 통해 인터페이스가 느려질 수 있습니다. (최근에는 거의 사용하지 않았습니다) – Tomen

+2

NSURLConnection을 비동기 적으로 사용하면 내부 하나의 스레드가 생성됩니다. 이것이 비동기식의 정의입니다. – malhal

-1

사과를 따를 경우 NSURLConnection에 대한 호출은 주 스레드와 다른 스레드에서 처리됩니다.

관련 문제