-->

如何正确开启和另一个线程关闭NSStream(How to properly open and cl

2019-09-18 00:28发布

我有一个连接到另一个线程使用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];

任何意见是极大的赞赏。

文章来源: How to properly open and close a NSStream on another thread