[iOS-Foundation] NSURLSessionTask

3702 단어
URL 세션 중 하나의task는 특정한 요청을 대표하며 NSURLSession 대상을 통해 다양한 종류의task를 만들 수 있습니다.NSURLSessionTask 클래스는 서로 다른 모든 task 클래스의 기본 클래스로, 하위 클래스는 NSURLSessionDataTaskNSURLSessionUploadTask10NSURLSessionDownloadTask1010NSURLSessionStreamTask을 포함합니다.
  • NSURLSessionDataTask은 응답 내용을 NSData 대상의 형식으로 되돌려주며 백그라운드 세션에 사용할 수 없습니다.
  • NSURLSessionUploadTaskNSURLSessionDataTask의 하위 클래스로 응답 내용을 NSData 대상의 형식으로 되돌려줍니다. 에이전트를 통해 요청할 때 업로드하는 과정을 볼 수 있고 이task는background session에 사용할 수 있습니다.
  • NSURLSessionDownloadTask은 자원을 파일로 하드디스크에 다운로드하는데session 형식의 제한이 없다.
  • NSURLSessionStreamTask은 TCP/IP 접속 구성을 제공합니다.

  • task 상태 제어


    task의 현재 상태는 열거 유형 NSURLSessionTaskState의 속성state로 표시되며 다음과 같은 몇 가지 가능한 값을 포함합니다.
    typedef NS_ENUM(NSInteger, NSURLSessionTaskState) {
        NSURLSessionTaskStateRunning = 0,
        NSURLSessionTaskStateSuspended = 1,
        NSURLSessionTaskStateCanceling = 2, /* task cancel , , - URLSession:task:didCompleteWithError: */
        NSURLSessionTaskStateCompleted = 3, /* */
    };
    
    NSURLSession을 통해 만든task는 기본적으로suspended이고 - resume 방법을 호출하면task의 상태는running으로 바뀐다.- suspend 방법으로task를 다시 마운트 상태로 바꿀 수 있으며, 런닝 상태를 회복할 때downloadtask는 중단된 곳에서 계속 전송할 수 있으며, 다른task는 다시 시작해야 한다.- cancel 방법을 호출한 후task는canceling 상태로 변하고delegate에 보내는 URLSession:task:didCompleteWithError: 메시지에서 error 파라미터의domain은 NSURLErrorDomain,code는 NSURLErrorCancelled이다.

    관련 정보

  • originalRequest,task를 만들 때 대응하는 요청 대상입니다.
  • currentRequest은 응답이 다른 URL로 리디렉션될 때 변경됩니다.
  • response, 서버에서 되돌아오는 NSURLResponse 대상.
  • taskIdentifier NSUInteger 유형,task는session에 있는 유일한 표지입니다.
  • error, 퀘스트가 실패할 때의 NSError 대상.
  • taskDescription, 퀘스트에 읽을 수 있는 설명을 설정하여 인터페이스 전시가 필요할 때 사용할 수 있습니다.

  • 진행 정보

  • countOfBytesExpectedToSend, 요청체의 바이트 수, 시스템은 헤더의 Content-Length 필드 또는 요청체로서의 NSData 또는 파일의 크기에 따라 이 값을 설정합니다.
  • countOfBytesSent, 발송된 요청체 바이트 수, 이 값이 변경되면 프록시 방법 -URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:
  • countOfBytesExpectedToReceive, 응답체가 원하는 바이트 수, 응답 헤더의 Content-Length 필드에 따라 명시되지 않으면 NSURLSessionTransferSizeUnknown (-1)
  • countOfBytesReceived, 이미 받은 응답체 바이트 수, 이 값이 변하면 프록시 방법 - URLSession:dataTask:didReceiveData: 또는 URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:
  • 우선 순위


    task는 priority 속성이 있는데 0에서 1 사이의 부동점수를 받아들인다. 각task의 서로 다른 priority 값을 통해 시스템task가 실행하는 우선순위를 알릴 수 있다. 1이 가장 높고 0이 가장 낮다.기본값은 NSURLSessionTaskPriorityDefault, 즉 0.5입니다.시스템은 3개의 상수 값을 제공합니다.
    NSURLSessionTaskPriorityDefault //0.5
    NSURLSessionTaskPriorityLow // 0
    NSURLSessionTaskPriorityHigh // 1
    

    Task 하위 클래스

    NSURLSessionDataTaskNSURLSessionUploadTask은 더 이상 별도의 방법을 실현하지 않고 서로 다른task를 구분하는 데 사용되었다.한편, NSURLSessionDownloadTask은task를 구분하는 방법 외에도 - cancelByProducingResumeData:을 추가로 실현했다. 이 방법은 기류 NSURLSessionTask- cancel 방법을 호출했고 매개 변수completionHandler는 Block을 전송하여 전송된 데이터를 처리하는 데 사용했다. 이resume 데이터는 앞으로session의 - downloadTaskWithResumeData: 방법으로 다운로드를 계속 중단할 수 있도록 사용할 수 있다.

    좋은 웹페이지 즐겨찾기