SlideShare a Scribd company logo
メインスレッド外で
NSURLConnection
Cocoa Study #61
Masayuki Nii
nii@msyk.net

13年9月6日金曜日
Agenda

NSURLConnection
NSOperation/NSOperationQueueによる並列処理
別スレッドで稼働させる方法
デモ

13年9月6日金曜日
NSURLConnection
とマルチスレッド処理

13年9月6日金曜日
NSURLConnectionとスレッド処理

ネットワーク処理のためのクラス

•
•

他に方法がないわけではないが、おそらく一番シンプル
非同期処理ができる

デリゲートされるメソッドを実装する

•
•
•

13年9月6日金曜日

実装方法は省略
普通に実装すると、それぞれのデリゲート処理がメインスレッドで
処理される
結果的に、重い処理をすると、ユーザインタフェースがスタック
マルチタスクだ!
NSThreadとか、dispatchなんとかとか…

•
•

もちろん、Cocoaにはいろんなメソッドがある
ドキュメントを見よう!

Grand Central Dispatch (GCD) Reference

•
•

13年9月6日金曜日

The BSD subsystem, CoreFoundation, and Cocoa APIs have
all been extended to use these enhancements to help both
the system and your application to run faster, more
efficiently, and with improved responsiveness.
GCD is not restricted to system-level applications, but
before you use it for higher-level applications, you should
consider whether similar functionality provided in Cocoa (via
NSOperation and block objects) would be easier to use or
more appropriate for your needs.
NSOperationとNSOperationQueue

NSOperation

•
•
•

処理を抽象化したようなクラス
NSOperationQueueにNSOperationクラスのインスタンスを追加
すれば、「別スレッド」での実行をしてくれる
NSOperationQueueを単に生成して、addOperation:メソッドで
NSOperationを追加すれば、それでほぼOK

NSOperationの継承クラス

•
•

13年9月6日金曜日

ブロックなら、NSBlockOperationクラスがあり便利
独自のクラスを継承して作るのも可能で比較的簡単
Demo

13年9月6日金曜日
Demoのまとめ

確かにメインスレッドでデリゲートが処理される
そのままNSOperationQueueにしてもうまくいかない
setDelegateQueue:でうまく動いた

13年9月6日金曜日
setDelegateQueue:?

13年9月6日金曜日
だが、iOS 5では動かず

13年9月6日金曜日
Threadと組み合わせるには

13年9月6日金曜日
NSURLConnection+Threadでググった(1)

#3
13年9月6日金曜日
NSURLConnection+Threadでググった(2)

#1
#2

13年9月6日金曜日
通信処理とマルチスレッド
iOS 5/Lion以降はキューの上で動かせばOKか?

•

NSOperationQueueを確保した上で、setDelegateQueue:でキュ
ーを渡せば良さそう

デリゲート先はメインスレッドのみという誤解?

•

以前はそうだったのかもしれないが、今は違う

RunLoopをどうにかする?

•
•
•
•
•

13年9月6日金曜日

iOS 4まではこの方法しかなかった
あちらこちらでRunLoopを動かしても影響はないとは言え…
スレッド内でrunMode:という自前ループは確かにあるが…
クラスのドキュメントには、scheduleInRunLoop:forMode:
Cocoa in the Shell でもう少しスマートな方法も(次のスライド)
13年9月6日金曜日
まとめ

NSConnectionのデリゲートはメインスレッド以外でも
受け取れるし、iOS 5/OS X 10.7から非常に簡単にな
っている

13年9月6日金曜日

More Related Content

PDF
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
PDF
Docker and OpenVNet
PDF
Softlayer+Pacemakerで構築するお手軽DR
PPTX
無印Pentium debian install memo
PDF
Linux女子部 systemd徹底入門
PDF
いろいろなデバイスでOpenVNetを動かしてみようとした。
PDF
P2Pネットワークを利用した分散ファイルシステムの開発
PDF
SDN界隈の用語・考え方をざっくりまとめます。
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
Docker and OpenVNet
Softlayer+Pacemakerで構築するお手軽DR
無印Pentium debian install memo
Linux女子部 systemd徹底入門
いろいろなデバイスでOpenVNetを動かしてみようとした。
P2Pネットワークを利用した分散ファイルシステムの開発
SDN界隈の用語・考え方をざっくりまとめます。

What's hot (20)

PDF
PXE @第一回成果報告会(2012/12/17)
PDF
仮想化&クラウドで活用!自動化ツールの基礎
PDF
Linux女子部 iptables復習編
PPTX
PDF
OpenVNet Updates 2013/11 in TremaDay#04
PDF
Wakame-vnet / Open Source Project for Virtual Network & SDN
PDF
OpenVNet at Vyatta Users Group
PPTX
Online.sg #10 LT by mikage014
PPTX
Distributed Systems 第1章 Introduction
PDF
RDOで体験! OpenStackの基本機能
PPT
第2回 分散システム本読書会
PPTX
Technical session 2 iaa s 始めました~自社内にある windows も linux もそして sql server も azur...
PDF
ザックリとDocker
PDF
今さらだけどMySQLとライセンス
PPTX
第2章アーキテクチャ
PDF
WindowsでMySQL入門
PDF
Hokkaido.cap#8 ケーススタディ(セキュリティ解析:後編)
PDF
OpenStackとPythonと私
PPTX
Apache Spark+Zeppelinでアドホックなネットワーク解析
PPTX
ネットワークプログラマビリティ勉強会 これまでのおさらい
PXE @第一回成果報告会(2012/12/17)
仮想化&クラウドで活用!自動化ツールの基礎
Linux女子部 iptables復習編
OpenVNet Updates 2013/11 in TremaDay#04
Wakame-vnet / Open Source Project for Virtual Network & SDN
OpenVNet at Vyatta Users Group
Online.sg #10 LT by mikage014
Distributed Systems 第1章 Introduction
RDOで体験! OpenStackの基本機能
第2回 分散システム本読書会
Technical session 2 iaa s 始めました~自社内にある windows も linux もそして sql server も azur...
ザックリとDocker
今さらだけどMySQLとライセンス
第2章アーキテクチャ
WindowsでMySQL入門
Hokkaido.cap#8 ケーススタディ(セキュリティ解析:後編)
OpenStackとPythonと私
Apache Spark+Zeppelinでアドホックなネットワーク解析
ネットワークプログラマビリティ勉強会 これまでのおさらい
Ad

Similar to Cocoa勉強会#61-メインスレッド外でNSURLConnection (15)

PDF
Modeling Workshop
PDF
テスト自動化読書会 第3章 20150523
PDF
TUI作業で便利なソフト2題
PDF
TogoRecipes 120907
PDF
OpenStack Kuryrについて
PDF
ML Studio / CNTK ハンズオン資料の紹介と開発環境の構築手順
PDF
OpenStackを一発でデプロイ – Juju/MAAS - OpenStack最新情報セミナー 2015年2月
PDF
Nodeにしましょう
PDF
Mojolicious::Liteを使ってみよう
PDF
mruby for embedded systems
ODP
Hudson (JJUG CCCにて)
PDF
初心者がOpenIndianaで自宅サーバを作ったよって話
PPTX
Osoljp201204
PDF
Principles of Transaction Processing Second Edition 9章 4~9節
PPTX
次世代エンタープライズの開発環境をライブで読み解く
Modeling Workshop
テスト自動化読書会 第3章 20150523
TUI作業で便利なソフト2題
TogoRecipes 120907
OpenStack Kuryrについて
ML Studio / CNTK ハンズオン資料の紹介と開発環境の構築手順
OpenStackを一発でデプロイ – Juju/MAAS - OpenStack最新情報セミナー 2015年2月
Nodeにしましょう
Mojolicious::Liteを使ってみよう
mruby for embedded systems
Hudson (JJUG CCCにて)
初心者がOpenIndianaで自宅サーバを作ったよって話
Osoljp201204
Principles of Transaction Processing Second Edition 9章 4~9節
次世代エンタープライズの開発環境をライブで読み解く
Ad

More from Masayuki Nii (20)

PDF
Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)
PDF
トップエスイー勉強会2014第1回-INTER-Mediator
PDF
Cocoa勉強会#34-iPhoneでタブバーを非表示に無理矢理する方法
PDF
Cocoa勉強会#23-カスタムシートとModality
PDF
Cocoa勉強会#6-SQLiteをCocoaで使う
PDF
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
PDF
Cocoa勉強会#57-Baseによるローカライズまとめ
PDF
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない
PDF
Cocoa勉強会#45-AWS SimpleDBを使ってみる
PDF
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
PDF
Cocoa勉強会#33-意外に楽に使えるlibcurl
PDF
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号する
PDF
Cocoa勉強会#27-QuickLookプラグインの作り方
PDF
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ
PDF
Cocoa勉強会#37-シェイクイベントの実装
PDF
Cocoa勉強会#32-表形式のデータに順序を記録する方法
PDF
Cocoa勉強会#35-iPhoneでのコピペとカスタムUI
PDF
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証
PDF
Cocoa勉強会#38-UITableViewテーブル内のナビゲーション
PDF
Cocoa勉強会#43-Blocksを使う
Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)
トップエスイー勉強会2014第1回-INTER-Mediator
Cocoa勉強会#34-iPhoneでタブバーを非表示に無理矢理する方法
Cocoa勉強会#23-カスタムシートとModality
Cocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
Cocoa勉強会#57-Baseによるローカライズまとめ
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない
Cocoa勉強会#45-AWS SimpleDBを使ってみる
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
Cocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号する
Cocoa勉強会#27-QuickLookプラグインの作り方
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ
Cocoa勉強会#37-シェイクイベントの実装
Cocoa勉強会#32-表形式のデータに順序を記録する方法
Cocoa勉強会#35-iPhoneでのコピペとカスタムUI
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証
Cocoa勉強会#38-UITableViewテーブル内のナビゲーション
Cocoa勉強会#43-Blocksを使う

Cocoa勉強会#61-メインスレッド外でNSURLConnection