Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20120616i phonedeveloperworkshop

3,481 views

Published on

2012/06/16の勉強会資料です

  • Be the first to comment

  • Be the first to like this

20120616i phonedeveloperworkshop

  1. 1. 「エキスパートObjective-Cプログラミング」で始める GCD入門 朔 洋一郎 (@saku2saku)
  2. 2. 当勉強会についてiPhoneアプリ開発者の交流技術情報の交換比較的初心者の方も多いです というか自分もそこまで熟練者ではないですそのため、もしかしたら間違ったことを言ってしまうかもしれませんがご容赦ください一緒にアプリ開発の勉強をしていきましょう!
  3. 3. 自己紹介名前 朔 洋一郎趣味 漫画を読みあさる プログラミング 料理 趣味創り
  4. 4. 製作iPhoneアプリ 世界夜景旅行 for iPhone MusicPlayerSleepTimer MusicPlayerSleepTimerFreeiPadアプリ 世界夜景旅行 工場夜景探検 夜桜花見旅行Web さくさく日記 http://iphonework.biz/ iPhone Developer Workshop http://workshop.iphonework.biz/
  5. 5. 「エキスパートObjective-Cプログラミング」で始めるGCD入門
  6. 6. GCDとは?Grand Central Dispatch の略マルチスレッドプログラミングをシステムレベルで実装した枠組み 開発者はタスクを定義して、それをキューに追加するだ けでマルチスレッド処理を実現できる 簡単に実装する上で細かいスレッドの制御を気にする 必要なくコードを記述できる 細かい制御(セマフォやjoinなど)をすることも可能 iOS4 以降から利用が可能になりました
  7. 7. キュー、タスクとは?タスクとは処理の定義、キューとはタスクを格納する処理の実行列 タスクはBlocksで定義される キューはFirst In First Outの概念の実行列 dispatch_async(queue, ^{...});
  8. 8. キューの種類キューは2種類あります シリアル実行キュー:Aのタスクが終了した後にBの タスクが実行される 並列実行キュー:AとBのタスク両方が並列に実行さ れるOS4 以前のマルチスレッドプログラミングはどうしていたか? NSObjectのperformSelectorInBackgroundや NSOperation、NSThreadなどで実装
  9. 9. キューの種類タスク シリアル実行キュー1 実行順2 キュー スレッド3 並列実行キュー4 実行順
  10. 10. キューの種類サンプルコード http://workshop.iphonework.biz/files/2012/06/ SampleCode.zip 並列実行キュー PerformInBackgroundConcurrent GCDConcurrent シリアル実行キュー PerformOnMainThreadSerial GCDSerial
  11. 11. Blocksの利用GCDのタスク定義はBlocksを利用する Blocksについては前回サンプルを含め、基本的な 使い方の説明も前回しているので良ければ参照し てください http://workshop.iphonework.biz/?p=446
  12. 12. Global Dispatch Queueキューは自前で生成するキューと、デフォルトで存在するキューの2種類がある High Priority: 優先度 高 Default Priority: 優先度 標準 Low Priority: 優先度 低 Background Priority: 優先度 バックグラウンド上記は全てConcurrentの実行キューMain Dispatch Queueというデフォルトで存在するキューもある(メインスレッド)
  13. 13. dispatch_queue_t のライフサイクルキューにはretainとreleaseの概念がある ARCが有効な場合にも上記は必要なので注意 dispatch_queue_createでキューの生成 dispatch_queue_releaseでキューの廃棄Global Dispatch Queueについてはreleaseは不要
  14. 14. その他サンプルテーブルビューの画像の非同期読み込み処理 AsyncImageLoadTable
  15. 15. 一歩進んだ使い方dispatch_after 数秒おいて処理を実行したいときに利用 正確なシステム時間による処理ではないため、 ある程度おおざっぱな処理向きdispatch_group_asyncとdispatch_group_notify 複数のdispatch_queueの処理の実行が全て終了 した後に処理を実行したいときに使用
  16. 16. さらに進んだ使い方「エキスパートObjective-C プログラミング」で詳しく説明されていますのでご参照ください! Amazon社のサイト
  17. 17. 追記:質疑応答についてdispatch_get_global_queueの第二引数のunsignedlong って何が妥当なんですか? 第二引数は予約領域となり、常に0を渡すことが公 式に推奨されておりますAsyncImageLoadTableのサンプルでdispatch_queue_createしていますがこれは沢山のキューが作られてしまうのでは? これは dispatch_get_global_queue と間違えてい たため、修正しました
  18. 18. ご清聴ありがとうございました

×