线程NSStream

时间:2012-01-30 15:26:43

标签: ios networking

我有一个连续打开的TCP连接,用于与外部设备通信。通信管道中发生了很多事情,导致UI有时无响应。

我想把通信放在一个单独的线程上。我理解detachNewThread以及它如何称呼@selector。我的问题是,我不确定如何将其与NSStream

结合使用

1 个答案:

答案 0 :(得分:2)

您可能更喜欢使用Grand Central Dispatch('GCD'),而不是手动创建线程并管理线程安全问题。这允许你发布块 - 代码包和一些状态 - 远离主线程执行,以及操作系统认为最合适的地方。如果您创建一个串行调度队列,您甚至可以确定如果您在旧块尚未完成时发布新块,系统将等待它完成。

E.g。

// you'd want to make this an instance variable in a real program
dispatch_queue_t serialDispatchQueue = 
            dispatch_queue_create(
                       "A handy label for debugging",
                       DISPATCH_QUEUE_SERIAL);

...

dispatch_async(serialDispatchQueue,
^{
    NSLog(@"all code in here occurs on the dispatch queue ...");
});

/* lots of other things here */

dispatch_async(serialDispatchQueue,
^{
    NSLog(@"... and this won't happen until after everything already dispatched");
});

...

// cleanup, for when you're done
dispatch_release(serialDispatchQueue);

非常快速地介绍GCD is here,Apple的more thorough introduction也值得一读。