Instance Method インスタンスメソッド

perform(_:with:afterDelay:inModes:)

Invokes a method of the receiver on the current thread using the specified modes after a delay. レシーバのあるメソッドを現在のスレッド上で指定したモードを使ってある猶予の後で発動します。

Declaration 宣言

func perform(_ aSelector: Selector, 
        with anArgument: Any?, 
  afterDelay delay: TimeInterval, 
     inModes modes: [RunLoop.Mode])

Parameters パラメータ

aSelector

A Selector that identifies the method to invoke. The method should not have a significant return value and should take a single argument of type id, or no arguments.

anArgument

The argument to pass to the method when it is invoked. メソッドに、それが発動されるときに渡される引数。 Pass nil if the method does not take an argument.

delay

The minimum time before which the message is sent. Specifying a delay of 0 does not necessarily cause the selector to be performed immediately. The selector is still queued on the thread’s run loop and performed as soon as possible. メッセージが送られる前の最小限の時間。0の猶予を指定することは、必ずしもセレクタが直ちに実行されるようにはしません。セレクタは、やはりスレッドの実行ループ上でキューに加えられ、そして可能な限り早く実行されます。

modes

An array of strings that identify the modes to associate with the timer that performs the selector. This array must contain at least one string. 文字列からなる配列、それはモードを識別してセレクタを実行するタイマーと結びつけます。この配列は、少なくとも1つの文字列を含まなければなりません。 If you specify nil or an empty array for this parameter, this method returns without performing the specified selector. For information about run loop modes, see Run Loops in Threading Programming Guide.

Discussion 解説

This method sets up a timer to perform the aSelector message on the current thread’s run loop. The timer is configured to run in the modes specified by the modes parameter. When the timer fires, the thread attempts to dequeue the message from the run loop and perform the selector. It succeeds if the run loop is running and in one of the specified modes; otherwise, the timer waits until the run loop is in one of those modes. タイマーが点火した場合、スレッドはこのメッセージを実行ループからデキューして(待ち行列からはずして)セレクタを実行しようとします。実行ループが動作していて指定されたのモードの1つならばそれはうまくいきます;そうでなければタイマーは実行ループがこれらのモードの1つになるまで待ちます。

If you want the message to be dequeued when the run loop is in a mode other than the default mode, use the perform(_:with:afterDelay:inModes:) method instead. If you are not sure whether the current thread is the main thread, you can use the performSelector(onMainThread:with:waitUntilDone:) or performSelector(onMainThread:with:waitUntilDone:modes:) method to guarantee that your selector executes on the main thread. To cancel a queued message, use the cancelPreviousPerformRequests(withTarget:) or cancelPreviousPerformRequests(withTarget:selector:object:) method.

Special Considerations 特別な注意事項

This method registers with the runloop of its current context, and depends on that runloop being run on a regular basis to perform correctly. One common context where you might call this method and end up registering with a runloop that is not automatically run on a regular basis is when being invoked by a dispatch queue. このメソッドは、それの現在の文脈の実行ループに登録します、そしてその実行ループが通常の原則上で動かされて正しく成し遂げられることをあてにします。あなたがこのメソッドを呼び出して自動的には通常の原則上で動かされない実行ループに登録することに終わるかもしれないよくある文脈は、ディスパッチキューによって発動されている時です。 If you need this type of functionality when running on a dispatch queue, you should use dispatch_after(_:_:_:) and related methods to get the behavior you want.

See Also 参照

Sending Messages メッセージ送信

Related Documentation 関連文書