iOSアプリ開発における別スレッドで通信する時の注意点(NSURLSession)

UI画面のカクつきを軽減するために、内部処理を別スレッドで実施することは少なくない。
その際、NSURLSessionでサーバ通信を行う場合、設定に気をつけないと通信結果がメインスレッドに返却されていまい、結果として画面のカクつきを引き起こしてしまう。

今回は、別スレッド上でNSURLSessionを用いて通信を行う場合、メインスレッドに通信結果が返却されない初期化方法について紹介する。
と言っても方法は単純である。NSURLSessionを初期化する時の引数「delegateQueue」に設定する値を「[NSOperationQueue currentQueue]」に変更するだけである。

<メインスレッドに結果が返却される>

NSURLSession *session = [NSURLSession sessionWithConfiguration:config
                         delegate:self
                         delegateQueue:[NSOperationQueue mainQueue]];	  //←ポイント

<別スレッドに結果が返却される>

NSURLSession *session = [NSURLSession sessionWithConfiguration:config
                         delegate:self
                         delegateQueue:[NSOperationQueue currentQueue]];  //←ポイント

<お勧め書籍>

詳解 Objective-C 2.0 第3版
iOSアプリ開発技術者として仕事をするのであれば、必ず読んでおくべき書籍である。
筆者も何度も繰り返し精読している。