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

perform(_:on:with:waitUntilDone:modes:)

Invokes a method of the receiver on the specified thread using the specified modes. レシーバのメソッドを指定スレッド上で指定モードを使って発動します。

Declaration 宣言

func perform(_ aSelector: Selector, 
          on thr: Thread, 
        with arg: Any?, 
waitUntilDone wait: Bool, 
       modes array: [String]?)

Parameters パラメータ

aSelector

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

thread

The thread on which to execute aSelector. This thread represents the target thread. このスレッドは、目標スレッドを表します。

arg

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

wait

A Boolean that specifies whether the current thread blocks until after the specified selector is performed on the receiver on the specified thread. 指定されたスレッドのレシーバで指定されたセレクタが実行される後まで現在のスレッドを封鎖するかどうかを指定するブール。 Specify true to block this thread; otherwise, specify false to have this method return immediately.

If the current thread and target thread are the same, and you specify true for this parameter, the selector is performed immediately. If you specify false, this method queues the message and returns immediately, regardless of whether the threads are the same or different.

array

An array of strings that identifies the modes in which it is permissible to perform the specified 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 解説

You can use this method to deliver messages to other threads in your application. The message in this case is a method of the current object that you want to execute on the target thread. あなたは、このメソッドを使って様々なメッセージをあなたのアプリケーションの別のスレッドに届けることができます。この場合におけるメッセージは、現在のオブジェクトのメソッドです、それはあなたが目標のスレッド上で実行するのを望むものです。

This method queues the message on the run loop of the target thread using the run loop modes specified in the array parameter. As part of its normal run loop processing, the target thread dequeues the message (assuming it is running in one of the specified modes) and invokes the desired method. それの標準的な実行ループ処理の一部として、目標のスレッドはメッセージを(それが指定された実行ループモードの1つで実行されていると仮定して)デキューして、要望されたメソッドを発動します。

You cannot cancel messages queued using this method. あなたは、このメソッドを使ってキューされたメッセージをキャンセルできません。 If you want the option of canceling a message on the current thread, you must use either the perform(_:with:afterDelay:) or perform(_:with:afterDelay:inModes:) method instead.

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 メッセージ送信