別のスレッドで NSStream を使用してサーバーに接続するアプリケーションがあります。また、ユーザーがログアウトすることを決定した場合、アプリケーションは接続を閉じます。問題は、ユーザーが切断したときにストリームまたはスレッドを正常に閉じることができないことです。以下は、ネットワークのスレッドを作成し、ストリームを閉じようとする方法のコード サンプルです。
+ (NSThread*)networkThread
{
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;
}
+ (void)networkThreadMain:(id)sender
{
while (YES)
{
@autoreleasepool {
[[NSRunLoop currentRunLoop] run];
}
}
}
- (void)scheduleInThread:(id)sender
{
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
[inputStream open];
}
- (void)closeThread
{
[inputStream close];
[inputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
[inputStream release];
inputStream = nil;
}
入力ストリームに接続しようとしたときに行われた呼び出し:
[self performSelector:@selector(scheduleInThread:) onThread:[[self class] networkThread] withObject:nil waitUntilDone:YES];
どんなアドバイスでも大歓迎です。