0

ソースを持っていないサードパーティのフレームワークを使用しています (そして使用する必要があります)。サードパーティ フレームワークは、認証されたクライアント/サーバー接続の作成を処理し、開いている NSStream のペアを返します。私が抱えている課題は、メインスレッドで NSStreams がスケジュールされていることです (UI が応答しなくなる可能性がある状況を作成する - これは避けたいと思います)。

ストリームがサード パーティ フレームワークから渡される時点では、進行中のネットワーク トラフィックはありません。それで、NSStreamsのスケジュールを解除して再スケジュールできるかどうか疑問に思っています。

開いている NSStream のスケジュールを解除し、別のスレッドの別の実行ループでスケジュールを変更できるかどうかを知っている人はいますか? それは問題を引き起こしますか?そこにコード例はありますか?

前もって感謝します!

アーロン

4

1 に答える 1

0

私があなたのアプリケーションを正しく理解している場合、それはあなたのアプリケーションが特定のストリームへの参照を受け取り、あなたが蒸気のすべてを読むことを担当していることを意味します。これらのストリームの読み取りは、NSThread、NSOperation、またはその他のスレッドメカニズムを介してアプリケーションからバックグラウンドに強制するものである必要があります。

例:

このNSInputStreamでのタイイングは、どのファイルでも次のようになります。

@property (strong, nonatomic) NSInvocationOperation *parseOp; 

(id)startInputRead:(NSInputStream *)input {
    if([input hasBytesAvailable]) {
        self.parseOp = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(readAndStoreInput:) object:inputStream];

    }

読者が次のような場合:

(void)readAndStoreInput:(NSInputSteam*) input{
     //process your input steam into your system in the background

}

これは、入力側でこれを行う方法の簡単な例です。同様の方法で、出力蒸気の作業をキューに入れることもできます。これにより、すべてが同時に実行され、アプリの応答性が維持されます。

于 2012-05-24T17:10:05.393 に答える