酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

メソッドを遅延実行する

処理A→描画更新要求(setNeedsDisplay)→処理Bという流れがあって、これらは同期的に処理が行われている。処理Bが行われる前に処理Aの結果を表示させておきたかったんだけど上手くいきませんでした。

どうもsetNeedsDisplayは、イベントループが一旦終わってから次のループ時に処理が行われるようです。処理Bを次以降のイベントループに持っていかないと駄目そう。調べてみたら、performSelector:withObject:afterDelayを使えば、考えていることが出来そうなのが分かった。

 (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay

iPhoneの情報は、もう日本語のドキュメントやブログで紹介されまくっているので助かりますね。以下、参考にさせて頂いたサイトです。

[iPhone SDK] 処理を遅延実行する方法 | DevCafeJp
iPhoneアプリ開発、その(120) 一人時間差攻撃〜!|テン*シー*シー

Cocoaのメインイベントループの仕組みについては、Cocoa Fundamentals Guide: グローバルアプリケーションオブジェクト が詳しい。