タグ

iPhoneSDKとGCDに関するsilemのブックマーク (8)

  • Dispatchでタイマーな処理 - Qiita

    Dispatch とは Apple の開発したグローバルなベストプラクティスを実践していただくグローバルなオポチュニティのことで、かつては Grand Central Dispatch (GCD) とも呼ばれていました。主にマルチスレッドな処理のために使われていますが、タイマーな処理にも使うことができます。 5秒後に処理を実行。 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5.0 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ NSLog(@"%@", [NSDate date]); });

    Dispatchでタイマーな処理 - Qiita
    silem
    silem 2013/11/07
    dispatchでタイマー処理
  • Yomo : Simple Time Logger - UIKitの描画をバックグラウンドで

    UIKit and GCD - Ryan’s App Blog この記事を見て、なるほど確かにそれなら上手くいくかもしれないと思って、実際にやってみたらすごくよかったので紹介します。 GCDを使って、UIの描画をバックグラウンドで行うという内容。 https://gist.github.com/2584135 とりあえずgist。 前提 UIの描画を行えるのはメインスレッドだけです。 なので、UIの描画が重いと、表示が遅くなったり、ScrollViewやTableViewではスムーズにスクロールできなかったりします。 通常のdrawRectでやっていること UIGraphicsGetCurrentContext()で取得できるCGContextRefに対して描画を行うと、画面の一部として出力することができます。 通常は、このCGContextRefに直接描画しますが、前述の通り、こ

  • Cocoaの日々: [iOS] バックグラウンド実行見本(Task Completion)

    (2011-12-01 追記あり)UIApplicationDelegateの呼び出しが iOS5 から変わった件。 Task Completion を使った iOS4 でのバックグラウンド実行サンプルを作ってみた。 サンプル 実行するとキューにたまった 30個のデータが順番に処理されてテーブルから消えていく。 処理は GCD を使い別スレッドで実行される。右上の[+]ボタンを押すとキューへデータが追加されていく。途中でホームボタンを押してアプリを切り替えても Task Completion によって処理は停止すること無く実行され続ける。わかりやすいようにアプリのアイコンバッヂに残タスク数を表示してみた。 バッジの数字は時間と共にカウントダウンされていくので処理が行われていることが確認できる。 Task Completion とは? Task Completion は、iOS4 から導入さ

    Cocoaの日々: [iOS] バックグラウンド実行見本(Task Completion)
    silem
    silem 2013/09/17
    アプリのバッジをカウントダウンさせる
  • GCDを試してみる : As Sloth As Possible

    Rubyと比べながらBlocksをいじってみたり、BlocksでNSArrayにmapメソッドを生やしてみたりしてきたので、そろそろGrand Central Dispatch(GCD)も試してみる。あんま関係ないけど、グランド・セントラル・ディスパッチってなんか必殺技っぽいよね。じゃあ一緒に高らかに叫んでみようか。せーの、グランド!セントラル!ディスパッチ!! GCDってなにさ ドキュメント嫁。 …だけだと流石に不親切なので、一応簡単に説明すると、APIを通してぽんぽん処理をqueueにつっこんでってやると、ランタイムの方でそれを上手いこと並列実行しといてやるよ!安心しろチェリーボーイ共、スレッドのことは俺が面倒見てやるぜ!って仕組み。そんな口調なのかどうかはわかんないけど、まぁ大体そんな感じ(適当)。 例によってRubyと比較 まぁ、こんなコードがあったとします。 # ruby f =

    GCDを試してみる : As Sloth As Possible
  • Objective-C で NSThread および GCD で非同期処理した結果を UI に反映する処理を書いてみた - 凹みTips

    はじめに 前回、Objective-C++ 使って iOS で Boost.Asio してみた - 凹みTips で書いた処理ですが、同期的に処理を行うため HTML を取ってくるまでの間、UI 系はブロックされてしまいます。 そこで UI 系がブロックされないようにするためにはどうすれば良いか調べてみました。 1. performSelectorInBackground / NSThread で実行 NSThread や performSelectorInBackground でセレクタを渡せば別スレッドで処理を実行することができます。 参考: Awaresoft ViewController.mm #import "ViewController.h" #include <boost/asio.hpp> @interface ViewController () @end @impleme

    Objective-C で NSThread および GCD で非同期処理した結果を UI に反映する処理を書いてみた - 凹みTips
  • Grand Central Dispatch その1 Block | Objective-Audio

    Grand Central Dispatchについて日語で丁寧に詳しく説明してくれるサイトはないかなぁと待っていたのですが、待っている間にひととおり自分なりに調べ終えてしまったので、まとめて書いておきます。まちがいに気がついたらご指摘いただけるとうれしいです。 Grand Central Dispatch(以下ディスパッチと書きます。リファレンスとか関数名とかGrand Centralって全然ついていなくてDispatchだけですし。)とはなんぞやというと、Snow Leopardから導入された並列処理のAPIです。並列処理といえばLeopardではNSOperationというObjective-CのAPIが導入されましたが、ディスパッチはC言語のAPIとして用意されていて、システムに近い低レベルなところで使えるものです。 あれこれ試した印象で言うと、コアが2つしかないCPUMacでた

    silem
    silem 2013/09/05
    わかりやすい
  • Objective-Cで非同期処理を同期処理にする方法。

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

    Objective-Cで非同期処理を同期処理にする方法。
  • Grand Central Dispatchで楽々マルチスレッド iPhoneプログラミング - @yuumi3のお仕事日記

    iPhoneでもiOS4以降サポートされたGrand Central Dispatchを使うと、マルチスレッドを使ったプログラムが簡単に作れます。WWDC 2010のビデオ(#206, #211) を見て何となく判った気になったのですが、まだクリアでない点があったので自分でコードを書いてみました。 私の理解では、Grand Central Dispatch(GCD)はには マルチプロセッサを有効に使える、並列プログラムを簡単に書ける 操作性を高める、並行処理を簡単に書ける の2つの目的があると思います。ここでは 2. に付いて書きます。 1.については Wikipediaの The second exampleが参考になると思います。 今回のサンプル ここでは、Twitterのpublic timelineを取得し、つぶやきとアイコンを表示するプログラムを、スレッドをまったく使わないコード

    Grand Central Dispatchで楽々マルチスレッド iPhoneプログラミング - @yuumi3のお仕事日記
  • 1