Skip to content

Instantly share code, notes, and snippets.

@kaiinui
Last active March 7, 2017 04:38
Show Gist options
  • Save kaiinui/a314550df450a2f566cc to your computer and use it in GitHub Desktop.
Save kaiinui/a314550df450a2f566cc to your computer and use it in GitHub Desktop.
NSURLSession の挙動

語彙

  • NSURLSession: OS の NSURLSession Daemon とのコネクションを管理するインスタンス。大体アプリにつき一つ。Singleton で OK. Delegate はこいつに紐づく。
  • NSURLSessionTask: 「リクエスト一つ」に対応。ただし OS 直属の NSURLSession Daemon に管理が委ねられる。

動き

  1. NSURLSession を初期化
  2. NSURLSessionTask を上記インスタンスから生成し、- resume する
  3. App が Active のとき、各イベント毎に NSURLSession に紐づく Delegate が呼出される。
  • - URLSession:downloadTask:didFinishDownloadingToURL: だけは呼出される。
  1. App が Non Active ならば、NSURLSession に紐づく Task が全て終わったとき。

注意点

  • NSURLSessionConfiguration + backgroundSessionConfigurationWithIdentifier:completionHandler に対応していない
    • リクエスト毎の completionHandler でのコールバック受けが出来ない。NSURLSession の Delegate で対応。
  • App が Non Active の時呼び出される - URLSession:downloadTask:didFinishDownloadingToURL: 内で NSURLSessionTaskresume することが出来ない。従って、無限ループを起こすことは出来ない
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment