URLSession

Lena·2021년 7월 30일
0

~공식문서 읽기~

Declaration

class URLSession : NSObject

Overview

URLSession class와 관련 class들은 URL을 통해 데이터를 다운로드, 업로드하기 위한 API를 제공합니다.
또한, App이 실행(running) 중이 아니거나, 중지되더라도 background에서 다운로드할 수 있도록 지원합니다.

URLSessionDelegate, URLSessionTaskDelegate를 사용해서 authentication을 지원하거나 redirection, task completion 같은 이벤트를 받도록 할 수 있습니다.

Note
The URLSession API involves many different classes that work together in a fairly complex way which may not be obvious if you read the reference documentation by itself. Before using the API, read the overview in the URL Loading System topic. The articles in the Essentials, Uploading, and Downloading sections offer examples of performing common tasks with URLSession.

URLSession API는 다양한 class들과 함께 작업하기 때문에, API를 사용하기 전에 URL Loading System topic에 대한 overview를 먼저 읽어보십시오.

Your app creates one or more URLSession instances, each of which coordinates a group of related data-transfer tasks. For example, if you’re creating a web browser, your app might create one session per tab or window, or one session for interactive use and another for background downloads. Within each session, your app adds a series of tasks, each of which represents a request for a specific URL (following HTTP redirects, if necessary).

Types of URL Sessions

The tasks within a given URL session share a common session configuration object,
which defines connection behavior, like the maximum number of simultaneous connections to make to a single host, whether connections can use the cellular network, and so on.

URLSession에 추가된 task는 common session co
nfiguration를 공유하는데, 연결 동작을 정의합니다.(connection behavior)
예를 들면, 하나의 호스트에 동시에 연결될 수 있는 최대 개수나
연결이 cellular network를 사용할 수 있는지 등이 있습니다.

URLSession은 singleton 세션인 shared를 제공하는데, 이것은 configuration object가 없습니다.
세션을 만들 때, 커스터마이징이 가능하지 않지만 basic request와 같은 제한적인 요청을 할 때 사용하기 좋습니다.
shared가 아닌 다른 세션을 만들 때는 다음 세 가지 중 하나의 configuration을 지정해야 합니다:

  • default : shared 세션과 비슷하게 동작하지만, delegate를 지정할 수 있습니다. (to obtain data incrementally)
  • Ephemeral : 캐시, 쿠기, credential 정보를 디스크에 쓰지(write)하지 않습니다.
  • Background : app이 실행 중이 아닐 때, background에서 업로드, 다운로드 task를 수행합니다.

Using a Session Delegate

Session Delegate를 구현해서 다양한 이벤트가 발생했을 때 정보를 얻을 수 있습니다. 예를 들면:

  • Authentication fails. -- 인증에 실패할 때
  • Data arrives from the server. -- 서버로부터 데이터가 내려왔을 때
  • Data becomes available for caching. -- 데이터를 캐싱해야 할 때

만약 delegate로 부터 제공되는 기능이 필요 없다면, 세션을 생성할 때 nil을 넘겨서 delegate 없이 API를 사용할 수 있습니다.

Important
session 객체는 delegate와 강한 참조 관계이므로, session을 invalidate 하지 않으면 app이 종료되게 전까지 memory leak이 발생할 것입니다.

Each task you create with the session calls back to the session’s delegate,
using the methods defined in URLSessionTaskDelegate. You can also intercept these callbacks before they reach the session delegate by populating a separate delegate that’s specific to the task.

Asynchronicity and URL Sessions

URLSession API는 비동기로 동작합니다.

  • In Swift or Objective-C, completion handler block를 제공해서 task가 완료되었을 때 실행할 작업을 전달할 수 있습니다.
  • In Swift or Objective-C, delegate method를 사용해서 전송이 진행 중이거나 완료된 직후 callbacks을 받을 수 있습니다.

Thread Safety

URLSession은 thread-safe 하기 때문에, 어떤 thread context 에서도 session을 생성할 수 있습니다.
만약, delegate method가 completion handlers를 호출한다면, 작업은 자동으로 알맞은 delegate queue에 스케줄링될 것입니다.
When your delegate methods call the provided completion handlers, the work is automatically scheduled on the correct delegate queue.

0개의 댓글