1

現在完了しているコードを遅らせることなく、NSNotification (かなりの量の作業をトリガーする可能性があります) を起動する方法はありますか?

具体的には、ユーザーが月、1 月、2 月などをパンできるようにする UIPanGestureRecognizer があります。ユーザーが指を離すと (レコグナイザーの状態が UIGestureRecognizerStateEnded に変わります)、いくつかの UI (フレームの調整など) を含むいくつかのクリーンアップ コードが実行されます。 )、そして -- 重要なことに -- 選択した月で発生する NSNotification です。

これは Simulator ではスムーズに動作しますが、iPhone 4 で実行するとパフォーマンスが低下します (つまり、指を離すと、UI が +1.5 秒間ロックアップします)。通知を削除すると、パフォーマンスは良好に戻ります。これらの通知はアプリ全体に送信されており (月ベースのカレンダー、週ベースのカレンダー、およびイベント リストを同期)、これまでパフォーマンスの問題は見られませんでした。パフォーマンスが問題になるのは、ジェスチャ認識エンジンと一緒に使用されているこの時点だけです。

4

3 に答える 3

1

まず、プロファイルを作成して、何が時間を取っているかを正確に把握する必要があります。1.5 秒の遅れは、現在であろうと少し先まで遅れていようと長い時間です。

通知を投稿すると、ブロードキャストされ、すぐに処理されます。あなたができる最善のことは、GCD またはperformSelector:withObject:afterDelay:(adelayの 0) を使用して、実行ループの次の反復で通知をポストすることです。

于 2013-09-30T19:29:12.690 に答える