ネットワークメッセージのバックグラウンドスレッドを作成するアプリケーションがあります。アプリケーションは、接続先のサーバーが接続を閉じない限り、ほぼ完全に機能します。なぜこれが起こるのかわかりませんが、アドバイスをいただければ幸いです。問題を追跡できるコードのスニペットを含めました。あいまいな点や詳細が必要な場合はお知らせください。
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {
switch(eventCode) {
case NSStreamEventErrorOccurred:
{
NSLog(@"NSStreamEventErrorOccurred");
[self Disconnect:self];
}
}
}
- (void)Disconnect:(id)sender {
[self performSelector:@selector(closeThread) onThread:[[self class]networkThread] withObject:nil waitUntilDone:YES];
[outputStream close];
[outputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream release];
outputStream = nil;
}
+ (NSThread*)networkThread
{
// networkThread needs to be static otherwise I get an error about a missing block type specifier
static NSThread* networkThread = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
networkThread = [[NSThread alloc] initWithTarget:self selector:@selector(networkThreadMain:) object:nil];
[networkThread start];
});
return networkThread;
}
ハングアップは、returnnetworkThread行で発生します。その行を実行した後、アプリケーションがハングしてフリーズしているように見え、その理由に指を置くことができません。
前もって感謝します。
編集
興味のある方のためのCloseThreadのコードスニペットは次のとおりです
- (void)closeThread
{
/*if(!inputStream)
return;
[inputStream close];
[inputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
[inputStream release];
inputStream = nil;*/
}