いつNSFireDelayedPerform
トリガーされるのか、そしてこれの基本的なルールは何かを理解しようとしました。しかし、これについて言及しているドキュメントやソースコードは見つかりませんでした。誰かが少しヒントを提供できますか?
2 に答える
私もこれに遭遇し、指定された遅延(2秒未満)の後にセレクターが実行されるときはいつでもこれが呼び出される可能性があると信じています。
[foo performSelector:@selector(f1) withObject:nil afterDelay:2];
以下は、20.060秒の遅延後にアプリが強制終了されたメインスレッドのスタックトレースからのものです。指定された2秒の遅延にもかかわらず、システムはこのセレクターを実行するのにはるかに長い時間(10秒以上)かかりました。これは、システムがNSTimerを使用してafterDelayパラメーターを使用してperformSelector呼び出しを処理することを意味します。残念ながら、おそらくメインスレッドのイベントキューに呼び出しを置き、指定された遅延(またはそれ以上)を待つようです。
6 Foundation 0x35bfaa6a __NSFireDelayedPerform
7 CoreFoundation 0x3add45dc CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION + 12
ここから始めます
の言及はありませんがNSFireDelayedPerform
、これは通常、のコンテキストで見られるため、何らかの意味がありますCFRunLoop
。
また、ここを見たいと思うかもしれません:
または実際にはさらに基本的です: