CFRunLoopTimer
CFRunLoopTimer オブジェクトは、将来の、予め設定された時間で起動する特殊な実行ループソースを表します。タイマーは、一度だけ、または繰り返し一定の時間間隔のいずれかで起動できます。繰り返しタイマーはまた、それらの次の起動時間を手動でも調整できます。
タイマーは、リアルタイムのメカニズムではありません。それは、実行ループモードのいずれか一つが、どのタイマーが追加され動作していて、タイマーの起動時間が経過したかどうかを確認できるときにのみ起動します。実行ループは、タイマーをモニターしたり、長い復帰命令の間ではないモードになっている場合は、実行ループがタイマーを確認する次の時までタイマーは起動しません。したがって、タイマーが潜在的に起動する実際の時刻は、スケジュールされた起動時間後の時間のかなりの期間とすることができます。
繰り返しタイマーは、実際の起動時間ではなく、スケジュールされた起動時間に基づいて、自分自身を再スケジュールします。例えば、タイマーが特定の時間とその後 5 秒ごとに起動するようにスケジュールされている場合、スケジュールされた起動時間は、実際の起動時間が遅れた場合でも、元の 5 秒の時間間隔で落ちます。スケジュールされた、起動時間の一つ以上を通過して起動時間が遅れた場合、タイマーは、その期間には 1 回のみ起動されます。タイマーは、その後、将来の次のスケジュールの起動時間のために、起動後、再スケジュールされます。
その実行ループ内に複数の実行ループモードに追加できますが、各実行ループタイマは、一度に一つだけしか実行ループに登録できません。
CFRunLoopTimer はその Cocoa Foundation の相手、NSTimer と"通話無料で繋がって" います。これは、Core Foundation の型が、繋がっている Foundation オブジェクトと関数やメソッドの呼び出しで交換可能であることを意味します。したがって、NSTimer * パラメーターがあるメソッドでは、CFRunLoopTimerRef に渡すことができ、CFRunLoopTimerRef パラメーターのある関数では、NSTimer インスタンスに渡すことができます。これはまた、NSTimer の具象サブクラスにも適用されます。通話無料で繋がっている詳細については、通話無料で繋がっている型 を参照してください。
関数
CFRunLoopTimer その他の関数
CFRunLoopTimerCreateWithHandler
ブロックベースのハンドラを持つ新しい CFRunLoopTimer オブジェクトを作成します。
宣言
<< SWIFT >>
func CFRunLoopTimerCreateWithHandler(_ allocator: CFAllocator!, _ fireDate: CFAbsoluteTime, _ interval: CFTimeInterval, _ flags: CFOptionFlags, _ order: CFIndex, _ block: ((CFRunLoopTimer!) -> Void)!) -> CFRunLoopTimer!
<< OBJECTIVE-C >>
CFRunLoopTimerRef CFRunLoopTimerCreateWithHandler ( CFAllocatorRef allocator, CFAbsoluteTime fireDate, CFTimeInterval interval, CFOptionFlags flags, CFIndex order, void (^block)( CFRunLoopTimerRef timer) );
パラメーター
allocator | allocator は、新しいオブジェクト用にメモリを割り当て(allocate) るために使用します。現在のデフォルトのアロケーターを使用するには、NULL または kCFAllocatorDefault を渡して下さい。 | |
fireDate | タイマーが最初に起動する時刻。起動日の細かい精度(最大でサブミリセカンド) は、そうするべき実装上の理由がある場合は、タイマーによって微調整できます。 | |
interval | タイマーの起動間隔。0 または負の場合は、タイマーの起動は一度であり、その後、自動的に無効にされます。そうするべき実装上の理由がある場合、間隔の細かい精度(最大でサブミリセカンド) はタイマーで微調整できます。 | |
flags | 現在は無視されます。将来の互換性のために 0 を渡して下さい。 | |
order | ループタイマを実行する順序を示す優先度が処理されます。実行ループのタイマーは現在、このパラメータを無視します。0 を渡して下さい。 | |
block | タイマーが起動した時に呼び出されるブロック。ブロックは、1 つの引数を取ります。 | |
timer | 起動された実行ループタイマー。 |
戻り値
新しい CFRunLoopTimer オブジェクト。所有権は、所有権ポリシー に記載した作成ルールに従います。
議論
タイマーが起動する前にそれは実行ループモードに追加する必要があります。実行ループにタイマーを追加するには、CFRunLoopAddTimer を使用します。タイマーはその実行ループ内で複数のモードであってもいいが、タイマーは、一度に一つだけ実行ループに登録できます。
利用可能
iOS 5.0 以降で利用できます。
CFRunLoopTimerCreate
関数の呼び戻しを持つ新しい CFRunLoopTimer オブジェクトを作成します。
宣言
<< SWIFT >>
func CFRunLoopTimerCreate(_ allocator: CFAllocator!, _ fireDate: CFAbsoluteTime, _ interval: CFTimeInterval, _ flags: CFOptionFlags, _ order: CFIndex, _ callout: CFRunLoopTimerCallBack!, _ context: UnsafeMutablePointer<CFRunLoopTimerContext>) -> CFRunLoopTimer!
<< OBJECTIVE-C >>
CFRunLoopTimerRef CFRunLoopTimerCreate ( CFAllocatorRef allocator, CFAbsoluteTime fireDate, CFTimeInterval interval, CFOptionFlags flags, CFIndex order, CFRunLoopTimerCallBack callout, CFRunLoopTimerContext *context );
パラメーター
allocator | 新しいオブジェクトにメモリを割り当てるために使用するアロケーター。現在のデフォルトのアロケーターを使用するには、NULL または kCFAllocatorDefault を渡します。 |
fireDate | タイマーが最初に起動する時刻。起動日の細かい精度(最大でサブミリセカンド) は、そうするべき実装上の理由がある場合は、タイマーで微調整できます。 |
interval | タイマーの起動間隔。0 または負の場合、タイマーの起動は一度で、その後自動的に無効にされます。そうするべき実装上の理由がある場合、間隔の細かい精度(最大でサブミリセカンド) はタイマーで微調整できます。 |
flags | 現在は無視されます。将来の互換性のため 0 を渡します。 |
order | 実行ループタイマーを処理する順序を示す優先度。実行ループタイマーは現在、このパラメータを無視します。0 を渡します。 |
callout | タイマーが起動した時、呼び出されryコールバック関数。 |
context | 実行ループタイマー用のコンテキスト情報を保持する構造体。関数は構造体のうちの情報をコピーするので、メモリは context によって指されるメモリーは関数呼び出しを超えて存続する必要はありません。コールバック関数が状態を追跡するために、コンテキストの info ポインタを必要としない場合、NULL を指定できます。 |
戻り値
新しい CFRunLoopTimer オブジェクト。所有権は、作成ルール に従います。
議論
それが起動する前にタイマーは実行ループモードに追加される必要があります。実行ループにタイマーを追加するには、CFRunLoopAddTimer を使用して下さい。その実行ループ内で複数のモードであってもいいですが、タイマーは、一度に一つだけ実行ループに登録できます。
利用可能
iOS 2.0 以降で利用できます。
CFRunLoopTimerDoesRepeat
CFRunLoopTimer オブジェクトが繰り返すかどうかを示すブール値を返します。
宣言
<< SWIFT >>
func CFRunLoopTimerDoesRepeat(_ timer: CFRunLoopTimer!) -> Bool << OBJECTIVE-C >> Boolean CFRunLoopTimerDoesRepeat ( CFRunLoopTimerRef timer );
パラメーター
timer | テストすべき実行ループタイマー。 |
戻り値
timer が繰り返すか周期性を持っている場合 true、それ以外の場合 false。
利用可能
iOS 2.0 以降で利用できます。
CFRunLoopTimerGetContext
CFRunLoopTimer オブジェクトの context 情報を返します。
宣言
<< SWIFT >>
func CFRunLoopTimerGetContext(_ timer: CFRunLoopTimer!, _ context: UnsafeMutablePointer<CFRunLoopTimerContext>) << OBJECTIVE-C >> void CFRunLoopTimerGetContext ( CFRunLoopTimerRef timer, CFRunLoopTimerContext *context );
パラメーター
timer | 調べるべき実行ループタイマー。 |
context | その中に timer のコンテキスト情報がコピーされる、構造体へのポインタ。返される情報は、timer を作成するときには CFRunLoopTimerCreate に渡されたのと同じ情報です。 |
議論
実行ループタイマーのコンテキストバージョン番号は、現在 0 です。この関数を呼び出す前に、context のバージョンメンバーを 0 に初期化する必要があります。
利用可能
iOS 2.0 以降で利用できます。
CFRunLoopTimerGetInterval
繰り返す CFRunLoopTimer オブジェクトの起動間隔を返します。
宣言
<< SWIFT >>
func CFRunLoopTimerGetInterval(_ timer: CFRunLoopTimer!) -6gt CFTimeInterval << OBJECTIVE-C >> CFTimeInterval CFRunLoopTimerGetInterval ( CFRunLoopTimerRef timer );
パラメーター
timer | 調べるべき実行ループタイマー。 |
戻り値
timer の起動間隔。timer が繰り返さない場合は 0 を返します。
利用可能
iOS 2.0 以降で利用できます。
CFRunLoopTimerGetNextFireDate
CFRunLoopTimer オブジェクトの次の起動時間を返します。
宣言
<< SWIFT >>
func CFRunLoopTimerGetNextFireDate(_ timer: CFRunLoopTimer!) -> CFAbsoluteTime << OBJECTIVE-C >> CFAbsoluteTime CFRunLoopTimerGetNextFireDate ( CFRunLoopTimerRef timer );
パラメーター
timer | 調べるべき実行ループタイマー。 |
戻り値
timer の次の起動時間。起動時間が到着しても、実行ループがタイマーを処理することができなかった場合は、この時間は、過去の日付の可能性があります。
利用可能
iOS 2.0 以降で利用できます。
CFRunLoopTimerGetOrder
CFRunLoopTimer オブジェクトの順序付けパラメータを返します。
宣言
<< SWIFT >>
func CFRunLoopTimerGetOrder(_ timer: CFRunLoopTimer!) -> CFIndex << OBJECTIVE-C >> CFIndex CFRunLoopTimerGetOrder ( CFRunLoopTimerRef timer );
パラメーター
timer | 調べるべき実行ループタイマー。 |
戻り値
タイマーの順序付けパラメータ。
議論
順序付けパラメータは、現在実行ループタイマによって無視されます。
利用可能
iOS 2.0 以降で利用できます。
CFRunLoopTimerGetTypeID
CFRunLoopTimer の不透明(opaque) 型の型識別子を返します。
宣言
<< SWIFT >>
func CFRunLoopTimerGetTypeID() -> CFTypeID << OBJECTIVE-C >> CFTypeID CFRunLoopTimerGetTypeID ( void );
戻り値
CFRunLoopTimer の不透明(opaque) 型の型識別子。
利用可能
iOS 2.0 以降で利用できます。
CFRunLoopTimerInvalidate
再び起動する事からそれを停止して、CFRunLoopTimer オブジェクトを無効にします。
宣言
<< SWIFT >>
func CFRunLoopTimerInvalidate(_ timer: CFRunLoopTimer!) << OBJECTIVE-C >> void CFRunLoopTimerInvalidate ( CFRunLoopTimerRef timer );
パラメーター
timer | 無効にすべき実行ループタイマー。 |
議論
一旦無効にされると、timer は決して起動しませんし、再びそのコールバック関数を呼び出しません。この関数は、その中に追加されていたすべての実行ループモードから timer を自動的に削除します。実行ループが timer への参照のみを保持しない限り、メモリは割り当て解除されません。
利用可能
iOS 2.0 以降で利用できます。
CFRunLoopTimerIsValid
CFRunLoopTimer オブジェクトが有効で、起できるかどうかを示すブール値を返します。
宣言
<< SWIFT >>
func CFRunLoopTimerIsValid(_ timer: CFRunLoopTimer!) -> Bool << OBJECTIVE-C >> Boolean CFRunLoopTimerIsValid ( CFRunLoopTimerRef timer );
パラメーター
timer | 調べるべき実行ループタイマー。 |
戻り値
timer が有効である場合 true、それ以外の場合は false。
議論
繰り返しでないタイマーは起動後に自動的に無効にされます。
利用可能
iOS 2.0 以降で利用できます。
CFRunLoopTimerSetNextFireDate
CFRunLoopTimer オブジェクトの、次に起動する日付を設定します。
宣言
<< SWIFT >>
func CFRunLoopTimerSetNextFireDate(_ timer: CFRunLoopTimer!, _ fireDate: CFAbsoluteTime) << OBJECTIVE-C >> void CFRunLoopTimerSetNextFireDate ( CFRunLoopTimerRef timer, CFAbsoluteTime fireDate );
パラメーター
timer | 変更すべき実行ループタイマー。 |
fireDate | timer の、新しい起動時間。 |
議論
タイマーの次の起動時間のリセットは比較的高価な操作であり、それを回避できる場合には行われるべきではありません。タイマーをオートリピートにすることは、より効率的です。しかし場合によっては、手動で調整した、繰り返しタイマーが有用です。例えば、将来複数回行うアクションがあるが、不規則な時間間隔の場合、実行ループモードを作成し、それに追加し、それぞれの起動イベント用のタイマを破壊することは非常に高価です。代わりに、遠い将来(または最初の起動時) の最初の起動時間で繰り返しタイマーを作成でき、非常に大きな繰り返し間隔ー数十年のオーダー以上ーで、必要なすべての実行ループモードに追加できます。そうすると、タイマーが次に起動する時を知っているときに、おそらく、タイマーの独自のコールバック関数から、CFRunLoopTimerSetNextFireDate で起動時間をリセットします。このテクニックは効果的に、再利用可能な非同期タイマーを生成します。
利用可能
iOS 2.0 以降で利用できます。
コールバック(関数)
CFRunLoopTimer のその他のコールバック(関数)
CFRunLoopTimerCallBack
CFRunLoopTimer オブジェクトが起動する時呼び出すコールバック(呼び戻し関数)。
宣言
<< SWIFT >>
typealias CFRunLoopTimerCallBack = (CFRunLoopTimer!, UnsafeMutablePointer<Void>) -> Void << OBJECTIVE-C >> typedef void (*CFRunLoopTimerCallBack) ( CFRunLoopTimerRef timer, void *info );
パラメーター
timer | 起動している実行ループタイマー。 |
info | 実行ループタイマーを作成するときに使用された CFRunLoopTimercontext 構造体の info メンバー。 |
議論
timer が繰り返す場合、CFRunLoopTimerSetNextFireDate を呼び出すことで、このコールバック内の起動時間を手動で更新しない限り、この関数を呼び出した後次の起動時間を実行ループは自動的にスケジュールします。timer が繰り返さない場合、実行ループは、timer を無効にします。
CFRunLoopTimerCreate でタイマーを作成するときは、このコールバックを指定して下さい。
利用可能
iOS 2.0 以降で利用できます。
データ型
その他
CFRunLoopTimerContext
CFRunLoopTimer の動作を構成できるプログラムに定義されたデータとコールバックを含む構造体。
宣言
<< SWIFT >>
struct CFRunLoopTimerContext { var version: CFIndex var info: UnsafeMutablePointer<Void> var retain: ((UnsafePointer<Void>) -> UnsafePointer<Void>)! var release: ((UnsafePointer<Void>) -> Void)! var copyDescription: ((UnsafePointer<Void>) -> Unmanaged<CFString>!)! init() init(version version: CFIndex, info info: UnsafeMutablePointer<Void>, retain retain: ((UnsafePointer<Void>) -> UnsafePointer<Void>)!, release release: ((UnsafePointer<Void>) -> Void)!, copyDescription copyDescription: ((UnsafePointer<Void>) -> Unmanaged<CFString>!)!) }
<< OBJECTIVE-C >>
struct CFRunLoopTimerContext { CFIndex version; void *info; CFAllocatorRetainCallBack retain; CFAllocatorReleaseCallBack release; CFAllocatorCopyDescriptionCallBack copyDescription; }; typedef struct CFRunLoopTimerContext CFRunLoopTimerContext;
フィールド
version
構造体のバージョン番号。0 でなければなりません。
info
実行ループタイマー作成時に関連付けることができる、プログラムに定義されたデータへの任意のポインタ。このポインタは、コンテキスト(文脈) に定義されたすべてのコールバック関数に渡されます。
retain
あなたのプログラムに定義された info ポインタ用の retain コールバック。NULL にすることができます。
release
あなたのプログラムに定義された info ポインタ用の release コールバック。NULL にすることができます。
copyDescription
あなたのプログラムに定義された info ポインタ用の copy description コールバック。NULL にすることができます。
利用可能
iOS 2.0 以降で利用できます。
CFRunLoopTimerRef
実行ループタイマーオブジェクトへの参照。
宣言
<< SWIFT >>
class CFRunLoopTimer { } << OBJECTIVE-C >> typedef struct __CFRunLoopTimer *CFRunLoopTimerRef;
Import 文
<< OBJECTIVE-C >>
@import CoreFoundation;
<< SWIFT >>
import CoreFoundation
利用可能
iOS 2.0 以降で利用できます。
次の章