[Apple] URLSessionTask

J.Noma·2022년 1월 5일
0

iOS : 네트워킹

목록 보기
3/6

Reference


✅ Remind

  • Task 별 지원되는 Session type이 상이하다
    (ex. data task는 background session이 지원하지 않는다)
  • Data Task는 background session을 지원하지 않는다
    (Upload/Download Task는 지원)
  • 서버의 Response를 Data Task는 메모리 로드만 하고, Download Task는 disk에 저장합니다
  • 메서드로 생성된 Task는 session이 별도로 강한참조를 유지한다 (성공/실패 시점까지)

⚙️ Overview

URLSessionTask class는 URLSession의 Task들을 위한 기본 class입니다. 참고로, 모든 Task는 session 일부로써 존재합니다. Task 생성은 URLSession의 메서드를 호출함으로써 이루어지기 때문입니다

생성하려는 Task의 타입에 따라 서로 다른 URLSession 메서드를 호출하게 됩니다. URLSession API는 아래 4가지 타입의 task를 제공합니다. 대부분은 Data Task를 쓰게 될텐데 Upload와 Download Task가 필요한 경우가 있습니다

Data Task
dataTask(with:)를 사용하여 URLSessionDataTask 인스턴스를 만듭니다. Data Task들은 서버에게 리소스를 요청하고, 서버의 응답을 하나 이상의 NSData 객체로 반환하여 메모리로 불러옵니다. session 종류 중 default, ephemeral, shared는 이를 지원하지만, background session은 지원하지 않습니다

Upload Task
uploadTask(with:from:)를 사용하여 URLSessionUploadTask 인스턴스를 만듭니다. Upload Task는 Data Task와 유사하지만, request body를 제공하기 용이하다는 차이점이 있습니다. 이를 통해 서버의 응답을 찾아오기 전에 Data를 업로드할 수 있습니다. 추가로, Upload Task는 background session에서도 지원됩니다

Download Task
downloadTask(with:)를 사용하여 URLSessionDownloadTask 인스턴스를 만듭니다. Download Task는 서버의 리소스를 직접 disk에 파일로 저장합니다. Download Task는 모든 session 타입에서 지원됩니다

Stream Task
streamTask(withHostName:port:) 혹은 streamTask(with:)를 사용하여 URLSessionStreamTask 인스턴스를 만듭니다. Stream Task는 호스트네임과 포트 혹은 net service 객체로부터 TCP/IP 연결을 만드는 task입니다

✅ NOTE
session은 request가 완료되거나 실패할 때까지 Task에 대한 강한참조를 유지하므로 별도로 강한 참조를 유지할 필요는 없습니다

NOTE
모든 Task 프로퍼티들은 KVO를 지원합니다

profile
노션으로 이사갑니다 https://tungsten-run-778.notion.site/Study-Archive-98e51c3793684d428070695d5722d1fe

0개의 댓글