Class

Timer

A timer that fires after a certain time interval has elapsed, sending a specified message to a target object. 特定の時間間隔が経過した後に発火するタイマー、指定されたメッセージをあるターゲットオブジェクトへと送ります。

Declaration 宣言

class Timer : NSObject

Overview 概要

Timers work in conjunction with run loops. Run loops maintain strong references to their timers, so you don’t have to maintain your own strong reference to a timer after you have added it to a run loop. タイマーは、実行ループと協力して働きます。実行ループそれらは、それらのタイマーへの強い参照を保守します、それであなたはタイマーへの強い参照をあなたがそれを実行ループに加えた後であなた自身で保守する必要はありません。

To use a timer effectively, you should be aware of how run loops operate. See Threading Programming Guide for more information. タイマーを効果的に使うには、あなたはどうやって実行ループが作動するかを知っているべきです。Threading Programming Guideをさらなる情報として見てください。

A timer is not a real-time mechanism. If a timer’s firing time occurs during a long run loop callout or while the run loop is in a mode that isn't monitoring the timer, the timer doesn't fire until the next time the run loop checks the timer. Therefore, the actual time at which a timer fires can be significantly later. See also Timer Tolerance. タイマーは、実時間機構ではありません。あるタイマーのもつ発火時間が、ある長い実行ループ呼び出しの間にまたはタイマーを管理していないモードに実行ループがある間に発生するならば、そのタイマーは、実行ループが次にタイマーを確認するまで発火しません。それゆえ、タイマーが発火する実際の時間は、著しく後になりえます。またタイマー公差を見てください。

Timer is toll-free bridged with its Core Foundation counterpart, CFRunLoopTimer. See Toll-Free Bridging for more information. Timerは、それのCore Foundation相当物、CFRunLoopTimerとトールフリーブリッジされます。さらなる情報のためにToll-Free Bridgingを見てください。

Comparing Repeating and Nonrepeating Timers 反復と非反復タイマーを比較する

You specify whether a timer is repeating or nonrepeating at creation time. A nonrepeating timer fires once and then invalidates itself automatically, thereby preventing the timer from firing again. By contrast, a repeating timer fires and then reschedules itself on the same run loop. A repeating timer always schedules itself based on the scheduled firing time, as opposed to the actual firing time. For example, if a timer is scheduled to fire at a particular time and every 5 seconds after that, the scheduled firing time will always fall on the original 5-second time intervals, even if the actual firing time gets delayed. If the firing time is delayed so far that it passes one or more of the scheduled firing times, the timer is fired only once for that time period; the timer is then rescheduled, after firing, for the next scheduled firing time in the future. あなたは、タイマーが繰り返すか繰り返さないかを作成時に指定します。非反復タイマーは、ただ一度だけ発火して、それからそれ自身を自動的に無効にします、それによってタイマーはもう一度発火することを防がれます。対照的に、反復タイマーは発火して、それからそれ自身を同じ実行ループ上で再度予定します。反復タイマーは、常にそれ自身をその予定された発火時間に基づいて予定します、実際の発火時間ではなくて。例えば、あるタイマーが発火をある特定の時間でそしてその後5秒毎に予定されるならば、予定された発火時間は常に元の5秒の時間間隔でやってくるでしょう、たとえ実際の発火時間が遅れようともです。その発火時間がそれが1つ以上の予定された発火時間を通り過ぎるまで遅れるならば、タイマーはその時間間隔に対してただ一度だけ発火されます;タイマーはそれから、その発火の後に、次の予定発火時間に対して予定されます。

Timer Tolerance タイマー公差

In iOS 7 and later and macOS 10.9 and later, you can specify a tolerance for a timer (tolerance). This flexibility in when a timer fires improves the system's ability to optimize for increased power savings and responsiveness. The timer may fire at any time between its scheduled fire date and the scheduled fire date plus the tolerance. The timer doesn't fire before the scheduled fire date. For repeating timers, the next fire date is calculated from the original fire date regardless of tolerance applied at individual fire times, to avoid drift. The default value is zero, which means no additional tolerance is applied. The system reserves the right to apply a small amount of tolerance to certain timers regardless of the value of the tolerance property. iOS 7以降およびmacOS 10.9以降において、あなたはタイマーに対してある公差を指定できます(tolerance)。タイマーが発火する時におけるこの柔軟性は、増大する出力の節約と応答性を最適化するシステムのもつ能力を向上させます。タイマーは、それの予定発火日時と予定発火日時に公差を加えたものの間のいつ何時にか発火するかもしれません。タイマーは、予定発火日時の前に発火しません。反復タイマーに対して、次の発火日時は、個々の発火時間に適用される公差に関係なく、元の発火日時から計算されます、ふらふらするのを防ぐために。省略時の値はゼロです、それはどんな追加的偏差も適用されないことを意味します。システムは、toleranceプロパティの値に関係なく、ある小さな量の公差を特定のタイマーに適用する権利を保有します。

As the user of the timer, you can determine the appropriate tolerance for a timer. A general rule, set the tolerance to at least 10% of the interval, for a repeating timer. Even a small amount of tolerance has significant positive impact on the power usage of your application. The system may enforce a maximum value for the tolerance. タイマーのユーザーのとき、あなたはあるタイマーに対して適切な公差を決定できます。おおまかな規則として、公差を少なくともその間隔の10%に設定してください、反復タイマーに対して。小さな量の公差でさえ、あなたのアプリケーションの動力利用にかなり明白な影響を持ちます。システムは、公差に対してある最大値を強要するかもしれません。

Scheduling Timers in Run Loops タイマーを実行ループの中で予定する

You can register a timer in only one run loop at a time, although it can be added to multiple run loop modes within that run loop. There are three ways to create a timer: あなたは、あるタイマーを一度に1つの実行ループにだけ登録できます、けれどもそれはその実行ループ内で複数の実行ループへと加えられることができます。タイマーを作成する3つの方法があります。

Once scheduled on a run loop, the timer fires at the specified interval until it is invalidated. A nonrepeating timer invalidates itself immediately after it fires. However, for a repeating timer, you must invalidate the timer object yourself by calling its invalidate() method. Calling this method requests the removal of the timer from the current run loop; as a result, you should always call the invalidate() method from the same thread on which the timer was installed. Invalidating the timer immediately disables it so that it no longer affects the run loop. The run loop then removes the timer (and the strong reference it had to the timer), either just before the invalidate() method returns or at some later point. Once invalidated, timer objects cannot be reused. 一旦ある実行ループ上で予定されたならば、そのタイマーは、指定された間隔で、それが無効にされるまで発火します。非反復タイマーは、それ自身をそれが発火した後に直ぐに無効にします。しかしながら、反復タイマーに対しては、あなたはタイマーオブジェクトをあなた自身でそれのinvalidate()メソッドを呼び出すことによって無効にしなければなりません。このメソッドを呼び出すことは、タイマーの現在の実行ループからの除去を要請します;結果として、あなたは常にinvalidate()メソッドを、タイマーが設置されたのと同じスレッドから呼び出すべきです。タイマーを無効にすることは、直ぐにそれを作動しないようにします、それでそれはもはや実行ループに影響を及ぼしません。実行ループはそれからタイマー(およびそれがタイマーに対して持つ強い参照)を取り除きます、invalidate()メソッドが返る直前またはより後のある時点でのどちらかで。一旦無効にされたならば、タイマーオブジェクトは再利用できません。

After a repeating timer fires, it schedules the next firing for the nearest future date that is an integer multiple of the timer interval after the last scheduled fire date, within the specified tolerance. If the time taken to call out to perform a selector or invocation is longer than the specified interval, the timer schedules only the next firing; that is, the timer doesn't attempt to compensate for any missed firings that would have occurred while calling the specified selector or invocation. ある反復タイマーが発火した後、それは次の発火を、指定tolerance内で、最後の予定発火日時後のタイマー間隔整数倍である、最も近い将来の日時に予定します。あるセレクタや発動を実行するための呼び出しにとられる時間が指定された間隔より長いならば、タイマーは次の発火を予定するだけです;すなわち、タイマーは、指定されたセレクタまたは発動の呼び出しの間に発生したかもしれないあらゆる失敗した発火に対して、埋め合わせをしようとしません。

Subclassing Notes サブクラス作成の注意

Do not subclass Timer. Timerのサブクラスを作成しないでください。

Topics 話題

Creating a Timer タイマーを作成する

Firing a Timer タイマーを発火する

Stopping a Timer タイマーを停止する

Retrieving Timer Information タイマー情報を取って来る

Configuring Firing Tolerance 発火交差を構成設定する

Firing Messages as a Combine Publisher メッセージそれらをあるCombineパブリッシャーとして発火する

Relationships 関係

Inherits From 継承元