2012-09-28 1 views
1

NSURLConnection의 설명서에 따르면 NSURLConnection은 별도의 스레드에서 실행되며 해당 대리자 메서드는 연결을 시작한 스레드에서 호출됩니다.여러 NSURLConnections가 여러 NSThread를 만드나요?

나는이 둘 이상의 있는 NSURLConnection 내가 병렬로 실행 "URLDownload < NSURLConnectionDelegate>"객체에 싸여 객체.

내 프로그램을 일시 중지하고 (잠시 중단 점을 넣을 때) 디버그 탐색기를보고있는 동안 com.apple.NSURLConnectionLoader 스레드가 하나만 표시됩니다. (그들 각각이 자신의 있는 NSURLConnection) 나는 5 URLDownload 객체를 생성

  1. 있는 NSURLConnection에 대한
  2. 5 스레드가 생성됩니다 (한 : 여기

    내가이 작품 생각하는 방법이다)

  3. NSURLConnection은 해당 스레드를 시작한 스레드에서 대리자 메서드를 호출합니다.

그래서 하나의 스레드에서 처리됩니다 5 개 스레드하지만 데이터 (각 있는 NSURLConnection 하나) (didReceiveData ... 방법 등)이 있습니다.

이 권리를 얻을 수 있습니까?

+0

가장 좋은 옵션은 무엇입니까? 문제가 무엇인지는 분명하지 않습니다. – hooleyhoop

+0

@hooleyhoop 마지막 문장을 추가해서는 안됩니다. 내 진짜 질문은 질문 제목입니다. 나는 그것을 제거 할 것이다. – vale4674

답변

1

비동기 NSURLConnection은 주 스레드에서 작동합니다. 즉, 알아야 할 모든 것입니다.

스레드는 네트워크 연결 작업량에 비례하여 많은 리소스를 사용하므로 비동기 NSURLConnection은 백그라운드 스레드를 1 개, 비동기식 NSURLConnections는 백그라운드 스레드 두 개를 사용할 수 있지만 비동기식 NSURLConnections는 100 배경 스레드.

NSURLConnection은 최적의 금액을 관리하는 블랙 박스입니다. 이것은 가지고있는 프로세서의 수, 네트워크 속도 등을 기반으로 할 수 있습니다. (주의 : 나는 그것이 두포에서 어떻게 작동하는지 알지 못합니다. 단지 알 필요가 없습니다. 올바른 일을 할 것입니다. 연결 당 쓰레드는 꽤 끔찍한 방법 일 것입니다.)

대리인 메서드 (didReceiveData 등)가 연결을 시작한 스레드에서 호출되므로 단일 스레드에서 호출되는 것과 같지 않습니다. 5 개의 다른 스레드에서 5 개의 연결을 시작하면 5 개의 다른 스레드에서 콜백을 얻을 수 있습니다.