4

次のコードを使用して、メイン実行ループでイベントをスケジュールしています。

[stream setDelegate:self];
[stream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[stream open];

これは、NSStreamDelegateイベントがメインの実行ループでスケジュールされていることを意味しているため、十分な頻度でUIの応答性に影響を与える可能性があると思います。これは確かに私のプログラムの場合のようです-たとえイベントハンドラーがそれ自体で多くの作業を行わずにバックグラウンドスレッドにデタッチしたとしても。

実行ループ以外のスケジューリングについてはどうすればよいmainRunLoopですか?スレッドを作成する必要がありますか?NSRunLoopを直接作成できますか?どのようなセットアップを実行する必要がありますか?

4

1 に答える 1

0

私の提案は、同時 nsoperstion を使用することです。このようなオブジェクトにメッセージを送信する方法を示すデモアプリが github にあります。そのようなプロジェクトもたくさん見つかります。次に、スレッド指定子を取る performSelector バリアントを使用できます (このような操作のスレッドは永続的です)。

オペレーションには実行ループがあるため、メッセージ、スレッド、簡単にキャンセルでき、それらの倍数を作成できます。

于 2012-09-16T12:36:11.520 に答える