ACAccountStoreのcompletionHandlerはサブスレッドっぽい


iOS 5から、システム側にTwitterアカウントを登録できるようになった。このアカウントは、Accountフレームワークを使って取得できる。その手順は、ACAccountStoreをインスタンス化して、requestAccessToAccountsWithType:withCompletionHandler:を呼ぶ。取得できると、指定したブロックが呼ばれるので、その中で処理を行う。

コード書いてテストしていたら、このブロックはメインスレッドではなくてサブスレッドで呼ばれるようだ。マジすか。ドキュメントにそんなこと書いてねーじゃん。従って、ここからユーザインタフェース周りを触ると、訳分からない挙動になる。すごい罠だ。

    • Nyoho
    • 2011年 12月23日

    これからは completion handler で呼ばれるようなものは全てディフォルトがサブスレッドで、むしろメインスレッドでやらなければいけないときだけ特別にメインキューを持ってきて dispatch というような、サブとメインが今まで逆のような実装が増えていくんでしょうか。

    今まではサブスレッドで実行させるのが特別という感覚でしたが、この記事を読んでそれが逆転するのかもと感じました。

  1. トラックバックはまだありません。