ネットワーク アクティビティが別のスレッドで行われるアプリがあります (ネットワーク スレッドは継続的にサーバーからデータを取得し、ディスプレイを更新します - ディスプレイの呼び出しはメイン スレッドで行われます)。ユーザーがログアウトすると、メイン スレッドは次のようにネットワーク スレッドで切断メソッドを呼び出します。
[self performSelector:@selector(disconnectWithErrorOnNetworkThread:) onThread:nThread withObject:e waitUntilDone:YES];
このセレクターはほとんどの場合呼び出され、すべて正常に動作します。ただし、この呼び出しが返されない (つまり、セレクターが実行されない) 場合があり (おそらく 10 回のうち 2 回)、スレッドとアプリがハングするだけです。performSelector が不規則に動作する理由を知っている人はいますか?
呼び出しが実行されるまで待つ必要があることに注意してください。そのため、waitUntilDone が YES になっているため、それを NO に変更することはできません。また、ネットワークスレッドには実行ループが実行されています(スレッドの作成時に明示的に開始します)。
また、データ転送は継続的に行われるため、GCD やオペレーション キューではなく、NSThreads を明示的に使用する必要があることにも注意してください。