2

重複の可能性
: -performSelector:withObject:afterDelay: はどのように機能しますか?

私はこのコードをよく使用して、長時間実行されるメソッドを呼び出す前に UI の処理を​​終了させます。

[obj performSelector:@selector(go) withObject:nil afterDelay:0];

しかし、それは何をしますか?

私の個人的な解釈は、常にgo次の実行ループでメソッドが呼び出されるというものでしたが、確かにそれは正しくありません。

4

1 に答える 1

5

遅延0を指定して呼び出すと、実行ループの次のパスで実際にこのメソッドが呼び出されます。

IIRC が行うことは、ターゲットとアクションを表す構造体をセットアップし、CFRunLoopSourceトリガーされたときにターゲットでアクションを呼び出す実行ループに をアタッチすることです。次に、実行ループにシグナルを送り、準備が整ったソースがあることを伝えます。これは、ランループが次にそのソースを処理するとき (つまり、ランループを通過する次のパス) に、遅延セレクターを実行することを意味します。

于 2013-02-05T22:06:14.763 に答える