タグ

gcdに関するgologo13のブックマーク (5)

  • Cocoaのマルチスレッドシステム - $ cat /var/log/shin

    Cocoaのマルチスレッド機構について解剖してみました。 実験環境 MacBook Pro Retina, 13-inch, Late 2013 OS X 10.9.2 (Mavericks) NSThread?時代はGCDでしょ! Cocoaには、GCD(Grand Central Dispatch)という新しい並列処理APIが入り、今はこちらを積極的に使うことが推奨されています。とはいえ、CocoaのベースとなっているのはCocoaスレッド(NSThread)なので、NSThreadとNSRunLoopに関する理解は、Cocoaのプログラミングをする上で必須だと思います。 ということで、この記事ではNSThreadを中心に掘り下げていきます。 NSThreadの基 NSThreadの使い方を簡単に説明すると、適当なクラスに別スレッドで処理するメソッドを用意して、それを適切にinitW

    Cocoaのマルチスレッドシステム - $ cat /var/log/shin
  • 実行ループとdispatch_sourceの話。 - なるようになるかも

    いまやiOSのネットワーク処理といえばAFNetworkingな感じです。 しかし古いストリーミングAPIを使った経験があれば、ブロックベースのAPIでどうやってネットワーク通信を行っているのか疑問に思うはずです。なぜかというと、 GCDは実行ループを持てない からです。 そもそも実行ループとは何なのでしょう。 実行ループとは NSRunLoop Class Referenceより The NSRunLoop class declares the programmatic interface to objects that manage input sources. An NSRunLoop object processes input for sources such as mouse and keyboard events from the window system, NSPort

    実行ループとdispatch_sourceの話。 - なるようになるかも
    gologo13
    gologo13 2014/05/08
    こういう資料本当に素晴らしい
  • 8.2 Grand Central Dispatch

    この章では、iOSにおけるマルチスレッドの手法であるGCD(Grand Central Dispatch)の使い方と、使う上での注意点について解説します この章では、次のAppleのドキュメントを参考に作成しています。 https://developer.apple.com/jp/devcenter/ios/library/documentation/ConcurrencyProgrammingGuide.pdf iOSにおけるマルチスレッド iOSにおける並列処理の手法にはいくつかの手法があります。 NSThread : スレッドを立てて、そのスレッドの中で処理を行う。スレッドの管理やキューイングなどの管理はアプリケーションが行う GCD (dispatch_xxx) : スレッドの管理などをOSレベルで実装したもの。処理をしたいタスクをBlockで渡す。渡されたタスクはキューに挿入され

    8.2 Grand Central Dispatch
    gologo13
    gologo13 2013/12/15
    ちょうわかりやすい
  • NSBlockOperationで手軽にキャンセル処理 - Qiita

    GCD便利ですね。手軽にネストした非同期処理を書けるので、使いまくっています。しかし一直線にコードを書いていると見過ごしがちなのが、キャンセル処理です。時間のかかる処理を途中で止める場合や、別のUIViewControllerに遷移するから処理そのものが必要なくなった場合に、処理を止めたい場合があります。具体的には以下の様なケースがあると思います。 大きなファイルのアップロード中にキャンセルボタンを出したい 画面遷移をしたら、前の画面で進行中の画像ダウンロードはキャンセルしたい このような場合にGCDライクに使えて、しかもキャンセル処理ができのが組み込みクラスのNSBlockOperationです。早速使い方を見て行きましょう。weakのおかげでややこしいメモリ管理を考えなくて楽です。 -(void)heavyTask { if (!_queue) _queue = [[NSOperati

    NSBlockOperationで手軽にキャンセル処理 - Qiita
  • Objective-Cで非同期処理を同期処理にする方法。

    同期処理は簡単に非同期処理にできますが、非同期処理は簡単には同期処理にできません。 Objective-Cで、非同期処理を同期的に実行するにはどうしたら良いのかと調べたところ、ディスパッチセマフォを使うのが良いようでした。 セマフォとは信号装置とかいう意味らしいですが、「カウンタ」だと思って良いんじゃないかと思っています。 同期処理の例 まずは通常の同期処理から。 for (int i = 0; i < 5; i++) { sleep(1); NSLog(@"Process: %d", i); } これは、1秒ごとにカウントを表示する処理です。これは当然同期処理です。実行を始めると5秒間はこの先に処理が進めません。 同期処理を非同期処理にする 同期処理を非同期処理にするには、dispatch_asycを用いて、バックグラウンドのスレッドのキューに処理を追加すれば良いです。 dispatch

    Objective-Cで非同期処理を同期処理にする方法。
  • 1