yashiganiの英傑になるまで死ねない日記

週末はマスターバイクでハイラルを走り回ります

Cocoa関西勉強会#49に参加した

Cocoa関西勉強会#49に参加して,マルチスレッドプログラミングについて話してきました. スライドは以下

本当に伝えたかったこと

  • キャンセル必要なら迷わずNSOperationQueueを使え
  • セレクタのことは嫌いになってもNSOperationQueueのことは嫌いにならないでください!
  • Cocoaならマルチスレッドプログラミングは簡単.迷わず進め.

質問について

@からの同期についてのツッコミ

タスクの途中で待って,っていう表現をしましたけど,間違いでした.

task1
task2
task3
WAIT
task4
task5
task6

みたいにtask1 -> task4,task2 -> task5, task3 -> task6のような依存関係を持っており,task1-3の完了を待って,task4-6を実行する必要があるとき,WAITでtask1-3を単一のqueueの中で待つということができるという意味でした.これは依存関係だけでは実現できないと思います.

@さんからのツッコミ

NSOperationQueueもGCDみたいにglobalにqueueがあれば便利じゃないかということでしたが,それやっちゃうとNSOperationQueueがGCDに勝る優位点である,キャンセルしやすいという点を棄てることになります.なぜなら,雑多なタスクがaddされてしまうと「これはキャンセルしてもいいけど,これはダメ」みたいな状態が発生するからです.queueは目的ごとに分けて生成し,保持するほうがいいでしょう.

言いそびれたこと

マルチスレッドプログラミングについては以下のドキュメントが詳しいです. https://developer.apple.com/library/mac/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008091-CH1-SW1

Blocks, ARC, GCDについては,エキスパートObjective-Cプログラミングを読むのが一番いいと思います.

エキスパートObjective-Cプログラミング ?iOS/OS Xのメモリ管理とマルチスレッド?

エキスパートObjective-Cプログラミング ?iOS/OS Xのメモリ管理とマルチスレッド?

ただし,dispatch_sourceについての記述はないので,そこに関してはAppleのドキュメント(上のやつ)とかを適宜参照してください.

どうでもいいこと

発表中に紹介したわりと反響があったエントリはこちらです

最後に

つたない発表でしたが聞いてくださりありがとうございました!大変良い経験になりました! あとHaskell最高なんで,興味あればすごいH本読書会に参加してください!

追記