タグ

Objective-CとSyncに関するBowz13のブックマーク (3)

  • Objective-Cでスレッドをデッドロックさせずに非同期処理の終了を待つ方法。

    「Objective-Cで非同期処理を同期処理にする方法。」に、ディスパッチセマフォによってスレッドがデッドロックしてしまう場合があるということを書きました。 デッドロックする例 これがその例です。 NSLog(@"start."); dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ for (int i = 0; i < 5; i++) { sleep(1); NSLog(@"Process: %d", i); dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"Main Process"); }

    Objective-Cでスレッドをデッドロックさせずに非同期処理の終了を待つ方法。
    Bowz13
    Bowz13 2014/02/12
    ディスパッチセマフォでメインスレッドをロックするのではなく、ランループに処理を戻す。
  • Main thread で実行 - Qiita

    以前は NSObject の - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait などを利用していた。 引数が0または1しか取れない、メソッドをわざわざ作る必要がある、など不便な点が多かった。引数増やすときは NSInvocation で回避できたが、やっぱり面倒だった。 GCD を使ったほうが簡単。 同期実行したいときは dispatch_async() の代わりに dispatch_sync() を使う。 Main thread から dispatch_sync で main queue に突っ込もうとすると誰も処理できずに詰まるので注意。 どの thread から呼ばれるかわからない場合は自分がどの thread にいるかチェックする。 (もっと良

    Main thread で実行 - Qiita
    Bowz13
    Bowz13 2013/08/31
    dispatch_sync : Main thread から dispatch_sync で main queue に突っ込もうとすると誰も処理できずに詰まるので注意
  • iOS 4のSDKで、Twitterを使ったiPhoneアプリを作る

    iOS 4のSDKで、Twitterを使ったiPhoneアプリを作る:SDKで始めるiPad/iPhoneアプリ開発の勘所(4)(2/4 ページ) 非同期通信を行う「NSURLConnection」クラス まずは、Twitterにアクセスしてデータ取得を行います。Cocoa Touchフレームワークには、「NSURLConnection」という通信用のクラスが用意されており、このクラスは「同期通信」「非同期通信」という2種類の通信が可能です。 同期通信では、NSURLConnectionを呼び出した側が通信完了まで次の処理に遷移できません。この間は、ユーザーの画面操作にも反応できないため、画面が固まってしまいます。 一方、非同期通信ではNSURLConnectionを呼び出した側は通信完了を待たずに、次の処理に移ります。タイミングをずらして後から返ってくる通信結果を受け取る仕組みを作る必要

    iOS 4のSDKで、Twitterを使ったiPhoneアプリを作る
  • 1